気になる言葉ショップ

気になる言葉ショップでは、管理人のわがままで選ばれた気になる言葉ごとのオンラインショッピングコーナーを設けています。
PaypalのIPNでGoogle Analyticsに通知する(PHP)

PaypalのIPNでGoogle Analyticsに通知する(PHP)

Paypalには、購入時などにバックグランドで処理が行えるようにIPN(即時支払通知)という機能があるので、これを使って、購入してくれたらWordpressを使った会員制サイトに登録するということをしよとしていました。これは、WordPressのプラグインWP-Membersでできたのですが、ついでに、Google Analyticsにつうちできないかと調べてみました。

そしたら、Measurement Protocol というのがあって、普通にサイトにアクセスするみたいにHTTPでできるようです。
eコマースデータを送る場合、Google Analyticsに通知するのに必要なパラメータは、だいたいPaypalのIPNで得られるのですが、1つcid(クライアントID)がありません。cidは必須パラメータで、とりあえず何か設定しておけば、Google Analyticsは、受け付けてくれます。

ただ、この場合、もとの購入ボタンのあるページに訪れた人と結びつかなくなってしまうので、ランディングページが(not set)となってしまいます。
正しく設定するには、購入ボタンのあるページで、Google Analyticsが設定したcidを取り出し、PaypalのIPNで通知してもらう必要があります。

Google Analyticsが設定したcidは、クッキーに入っているので、ググると、とり出すコードとか出てきましたが、もっと単純にGoogle Analyticsのga関数に用意されていました。クライアント ID の取得

ga(function(tracker) {
	var clientId = tracker.get('clientId');
});

次に、PaypalのIPNで通知する方法ですが、いくつかのパススルーパラメータという販売側が独自に使える変数が用意されているので、そのうちのcustomを使うことにします。

paypalで作成したボタンのコードにcustomを設定するinputタグを追加します。

<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="custom" value="">
<input type="hidden" name="cmd" value="_s-xclick">
・・・
</form>

Google AnalyticsのコードにclientIdを獲得して、上記のcustomのvalueに格納するスクリプトを追加します。

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-xxxxx-yy', 'auto');
  ga('send', 'pageview');

  ga(function(tracker) {
	var clientId = tracker.get('clientId');
	var nodeList = document.getElementsByName('custom');
	for( var i = 0; i < nodeList.length; i++){
		nodeList.item(i).value = clientId;
	}
  });
</script>

eコマースデータの場合は、t=transactionと、t=itemの2種類送信する必要があるので、IPNを受けたら、共通のパラメータ$paramと、t=transaction用のパラメータ$transaction_param、t=item用のパラメータ$item_param以下のように設定する。

$url = "https://www.google-analytics.com/collect";
$price = $_POST['mc_gross'] - $_POST['tax'];
$param = "v=1&tid=UA-xxxxx-yy&cid=" . urlencode($_POST['custom'] ). "&ti=".$_POST['txn_id'] ."&cu=".$_POST['mc_currency'];
$transaction_param = "&t=transaction&tr=".$_POST['mc_gross'] ."&tt=". $_POST['tax'];
$item_param = "&t=item&in=". urlencode($_POST['item_name']) . "&iq=" .$_POST['quantity']. "&ip=" . $price;

この後、これらのパラメータで、POSTすれば、完了です。

Comments are closed.