トークンの取得
トークン取得と、初回課金に必要なもの
本ページは接続仕様書ver,3.0.0以降をご覧の方を対象に公開しています。
1. 当社が公開しているJavaScriptファイルを参照する
記述場所は<head>内を推奨します。
- <script src="https://token.ccps.jp/UpcTokenPaymentMini.js"></script>
2. 店舗IDの識別と、各種フィールド名を定義するJavaScript
記述場所は</body>の直前を推奨します。なお末尾の</script>は省略して「3.」の記述と繋げることも可能です。設置ページに他のJavaScriptの記述がある場合、それ以降に(読み込みが最後になるよう)記述することを推奨します。
- <script type="text/javascript">
- function getMemberToken() {
- //ボタンの無効化
- document.getElementById("token").disabled = true;
- var cardno, securitycode, expire, holderfirstname, holderlastname, memberid, membercode,
- email, phonenumber;
- cardno = document.getElementById('cardno').value;
- securitycode = document.getElementById('securitycode').value;
- expire = document.getElementById('expire_month').value + '' +
- document.getElementById('expire_year').value;
- holderfirstname = document.getElementById('holderfirstname').value;
- holderlastname = document.getElementById('holderlastname').value;
- memberid = document.getElementById('memberid').value;
- membercode = document.getElementById('membercode').value;
- email = document.getElementById('email').value;
- phonenumber = document.getElementById('phone_number').value;
- Multipayment.init('100001'); //当社発行の店舗ID
- Multipayment.getMember({ //決済フォームより取得した情報
- cardno: cardno, //カード番号
- securitycode: securitycode, //セキュリティコード
- expire: expire, //カード有効期限
- holderfirstname: holderfirstname, //カードホルダー名
- holderlastname: holderlastname, //カードホルダー姓
- memberid: memberid, //会員番号
- membercode: membercode, //会員コード
- email: email, //メール
- phonenumber: phonenumber//電話番号
- },
- execMemberPurchase);
- }
- </script>
3. 取得したトークンで課金リクエストするためのJavaScript
リクエストに基づくトークン化が完了した際に、それを受け取って課金リクエストするために必要な記述です。19行目のコメントアウトを解除して記述すれば、課金時の消費者によるボタン押下を自動化することで省略します。
カード情報保持/通過に関する重要事項告知
「カード番号など不要な(保持・通過すべきでない)データを削除する」とコメントされた記述は絶対に変更しないでください。PCI DSSに準拠していない加盟店がカード情報を保持/通過させた場合、加盟契約の打ち切りの可能性があるばかりか、アクワイアラないしカードブランドから罰金が課せられる可能性があり、その場合、当社は加盟店様へ罰金の全額と対応にかかる実費を請求いたします。
- <script type="javascript">
- function execMemberPurchase(response) {
- if (response.resultCode !== "000" && response.resultCode !== 0) {
- var lang = "ja";
- if (document.getElementById('lang') != null)
- lang = document.getElementById('lang').value;
- window.alert('Error: ' + getResultCodeDetail(response.resultCode, lang));
- } else {
- //カード番号など不要な(保持・通過すべきでない)データを削除する
- document.getElementById('cardno').value = "";
- document.getElementById('securitycode').value = "";
- document.getElementById('expire_year').value = "";
- document.getElementById('expire_month').value = "";
- document.getElementById('holderfirstname').value = "";
- document.getElementById('holderlastname').value = "";
- // TokenをセットしフォームをSubmitする
- document.getElementById('upcmemberid').value = response.tokenObject.token;
- // 決済処理まで行う場合はコメントアウトを外す
- //submit();
- }
- }
- </script>
4. カード情報(カード番号、有効期限、姓、名)を「5.」に"getMemberToken()"する<form>タグ
- <form action="「5.」の設置先URL。多くの場合この記述があるページ自身" method="get" name="purchaseForm" id="purchaseForm">
- <p>言語:<select name="lang" id="lang">
- <option value="ja">日本語(ja)</option>
- <option value="en">英語(en)</option>
- <option value="cn">中国語簡体字
- (cn)</option>
- <option value="tw">中国語繁体字(tw)</option>
- </select>
- </p>
- <p>カード番号:
- <input type="text" name="cardno" id="cardno">
- </p>
- <p>セキュリティコード:
- <input type="text" name="securitycode" id="securitycode">
- </p>
- <p>カード有効期限:
- <input type="text" name="expire_month" id="expire_month">/<input type="text" name="expire_year" id="expire_year">
- </p>
- <p>カード名(名):
- <input type="text" name="holderfirstname" id="holderfirstname">
- カード名(姓):
- <input type="text" name="holderlastname" id="holderlastname">
- </p>
- <p>会員番号:<!--継続課金をする場合必須-->
- <input type="text" name="memberid" id="memberid">
- </p>
- <p>会員コード:<!--注文や会員を識別する任意の文字列-->
- <input type="text" name="membercode" id="membercode">
- </p>
- <p>メール:
- <input type="text" name="email" id="email">
- </p>
- <p>電話番号:
- <input type="text" name="phonenumber" id="phonenumber">
- </p>
- <p>
- <input type="button" onclick="getMemberToken()" id="token" value="会員情報Token化">
- <input type="button" onclick="submit()" value="決済処理
- ">
- </p>
- <p>ShopId:
- <input type="text" readonly="readonly" value="100001" id="sid" name="sid">
- </p>
- <p>UpcMemberId<input type="text" readonly="readonly" value="" id="upcmemberid" name="upcmemberid">
- </p>
- </form>
5. サーバ間通信を行うプログラム
ここでは一例としてphpを使い、 仮実働時処理をする記述を紹介しています。実装時には接続仕様書とゲートウェイ接続サンプルを参照の上、加盟店サイトのビジネスモデルに適したジョブ(処理)内容に編集してください。
- require_once 'HTTP/Request.php';
- /*
- sid:店舗ID
- svid:サービス種別(1:固定)
- ptype:処理種別(1:Gateway接続)
- job:決済ジョブタイプ(CAPTURE:仮実同時処理)
- upcmemberid:トークン
- rt:結果返信方法(2:レスポンス)
- sod:店舗オーダー番号(店舗独自のパラメータ)
- siam1:商品金額
- sisf1:商品送料
- */
- //upcmemberidが設定されていないと決済時エラーになりますので、適宜エラーハンドリングを行うようにしてください。
- $token="";
- $token = $_POST["upcmemberid"];
- /* 接続URLの設定 */
- $url = 'https://gw.ccps.jp/memberpay.aspx?';
- $url = $url . 'sid=100010&svid=1&ptype=1&job=CAPTURE&rt=2';
- $url = $url . '&upcmemberid=' . $token;
- $url = $url . '&sod=testtransaction';
- $url = $url . '&siam1=1050&sisf1=0';
- $request = &new HTTP_Request();
- $request->setURL($url);
- /* 結果HTMLの取得 */
- $result = $request->sendRequest();
- /* 結果が取得できれば処理継続 */
- if (!PEAR::isError($result)) {
- $data = $request->getResponseBody();
- //&を区切りにレンスポンスデータを分割し配列にする
- $result_array = explode('&', $data);
- for( $i = 0; $i < count( $result_array ); $i++ )
- {
- $target_array = explode( '=', $result_array[$i] );
- if( $target_array[0] == "rst" ) {break;}
- }
- if ( (int)$target_array[1] == 1 ) {
- /* 決済処理成功の場合はここに処理内容を記載 */
- print ( '決済成功' );
- } else {
- /* 決済処理失敗の場合はここに処理内容を記載 */
- print ( '決済失敗' );
- }
- } else {
- /* 決済処理エラーの場合は個々に処理内容を記載 */
- print ( '決済エラー' );
- }
require_once 'HTTP/Request.php'; /* sid:店舗ID svid:サービス種別(1:固定) ptype:処理種別(1:Gateway接続) job:決済ジョブタイプ(CAPTURE:仮実同時処理) upcmemberid:トークン rt:結果返信方法(2:レスポンス) sod:店舗オーダー番号(店舗独自のパラメータ) siam1:商品金額 sisf1:商品送料 */ //upcmemberidが設定されていないと決済時エラーになりますので、適宜エラーハンドリングを行うようにしてください。 $token=""; $token = $_POST["upcmemberid"]; /* 接続URLの設定 */ $url = 'https://gw.ccps.jp/memberpay.aspx?'; $url = $url . 'sid=100010&svid=1&ptype=1&job=CAPTURE&rt=2'; $url = $url . '&upcmemberid=' . $token; $url = $url . '&sod=testtransaction'; $url = $url . '&siam1=1050&sisf1=0'; $request = &new HTTP_Request(); $request->setURL($url); /* 結果HTMLの取得 */ $result = $request->sendRequest(); /* 結果が取得できれば処理継続 */ if (!PEAR::isError($result)) { $data = $request->getResponseBody(); //&を区切りにレンスポンスデータを分割し配列にする $result_array = explode('&', $data); for( $i = 0; $i < count( $result_array ); $i++ ) { $target_array = explode( '=', $result_array[$i] ); if( $target_array[0] == "rst" ) {break;} } if ( (int)$target_array[1] == 1 ) { /* 決済処理成功の場合はここに処理内容を記載 */ print ( '決済成功' ); } else { /* 決済処理失敗の場合はここに処理内容を記載 */ print ( '決済失敗' ); } } else { /* 決済処理エラーの場合は個々に処理内容を記載 */ print ( '決済エラー' ); }
動作サンプル
動作サンプルは以下になります。
Copyright UNIVA Paycast Limited All rights reserved.