iTransact サポート技術者によると、HTML フォームを作成して、ユーザーが iTransact (itransact.com) のサブスクリプション設定を変更できるようにする方法はありません。ただし、これを可能にする XML API があります。
XML リクエストを iTransact の XML API に送信するコードは単純で直感的ではないため、動作するサンプル プログラムをスタック オーバーフローに投稿することにしました。 iTransact.com のドキュメント。
次のサンプル プログラムは、既存のトランザクションの詳細を取得する要求を送信します。
<?php
define('ITRANSACT_API_UPDATE_URL', 'https://secure.itransact.com/cgi-bin/rc/xmltrans2.cgi');
define('ITRANSACT_API_GATEWAY', '12345'); // vendor account number
define('ITRANSACT_API_USERNAME', 'fdfsdfksafdsafdsafdsafdsafdsa'); // vendor API username
define('ITRANSACT_API_KEY', 'fdsfdsafdsafdsfdsfdsfds'); // vendor API key
/**
* iTransact's XML API requires us to encrypt the XML command with a
* special key known only to us and iTransact. This is to ensure that the
* request cannot be modified after leaving our server.
*
* A keyed hash value is generated using the HMAC-SHA1 algorithm and then
* encoded with base-64 MIME.
*
* @param string $strXMLCmd: xml for the command operation
*
* @returns string: the base64-encrypted HASH_SHA1 payload Signature
* for the command
*/
function getITransactPayloadSignagureForCommand($strXMLCmd){
$key = ITRANSACT_API_KEY;
#Using built in PHP5 functions:
$digest = hash_hmac('sha1', $strXMLCmd, $key, true);
$strPayLoadSignature = base64_encode($digest);
#Using PEAR module:
#require_once 'Crypt/HMAC.php';
#$hmac = new Crypt_HMAC($key,"sha1");
#$digest = pack("H40", $hmac->hash(trim($payload)));
#$actual_signature = base64_encode($digest);
return $strPayLoadSignature;
}
/**
* Constructs the XML request in the iTransact format for the request
* including login credentials
*
* @param string $strXMLCmd: specific xml for the operation command
*/
function construct_itransact_xml($strXMLCmd){
$strPayLoadSignature = getITransactPayloadSignagureForCommand($strXMLCmd);
$strXML = '<?xml version="1.0"?>';
$strXML .= '<GatewayInterface>';
// Login credentials:
$strXML .= '<APICredentials>';
$strXML .= '<Username>'.ITRANSACT_API_USERNAME.'</Username>';
$strXML .= '<PayloadSignature>'.$strPayLoadSignature.'</PayloadSignature>';
$strXML .= '<TargetGateway>'.ITRANSACT_API_GATEWAY.'</TargetGateway>';
$strXML .= '</APICredentials>';
$strXML .= $strXMLCmd; // Unique part of every command
$strXML .= '</GatewayInterface>';
return $strXML;
}
/**
* Sends an XML request to iTransact.
*
* @param string $xml: the XML to send to iTransact
*
* @returns string: the XML responde from iTransact
*/
function post_xml_to_iTransact($xml) {
$url = ITRANSACT_API_UPDATE_URL;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml; charset=utf-8"));
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$result = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
return $result;
}
// *** MAIN ***
// construct XML command:
$strXID = '12345'; // transaction_id we wish to get details of
$strXMLCmd = '<RecurDetails><OperationXID>'.$strXID.'</OperationXID></RecurDetails>'; // command we wish to send
$strXML = construct_itransact_xml($strXMLCmd);
// send XML command:
$strReturnedXML = post_xml_to_iTransact($strXML); // send request and fetch result
echo 'Response XML from iTransact: '.var_export(htmlspecialchars($strReturnedXML), TRUE);
?>
注: 既存の定期購読を更新/キャンセルするリクエストは、同様の形式になりますが、「recurDetails」コマンドの代わりに「recurUpdate」コマンドを使用します (可能なすべてのコマンドの詳細については、http ://www.itransact.com を参照してください)。 /downloads/PCDeveloperGuide.pdf )