2012-08-29 37 views
0

如何创建HTML表单以允许用户更改其iTransact(itransact.com)订阅设置?iTransact:如何创建脚本来更改/取消用户订阅

例如:1)停止使用自动续订的:

  • 形式需要在 'recur_reps' 值更改为0

例如:2)改变他们的订阅类型:

  • 形式需要改变 'recur_total' 和 'recur_desc'
01的值

(即:发布表单的网址是什么以及我需要发布哪些表单域?)

回答

0

根据iTransact支持技术人员,无法创建HTML表单以允许用户更改他们的iTransact(itransact.com)订阅设置。但是,有一个XML API可以完成这项工作。

由于向iTransact的XML API发送XML请求的代码并不简单直观,因此我决定将一个工作示例程序发布到Stack Overflow上,因为它可能对其他人有用,特别是因为它们没有示例喜欢它在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); 

?> 

注:请求更新/取消现有定期订阅也会产生类似的格式,但将使用“recurUpdate”命令而不是“recurDetails”命令(对所有可能的命令的全部详细信息,请参阅:http://www.itransact.com/downloads/PCDeveloperGuide.pdf