微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Chasepaymentech轨道网关-PHP中的电子商务问题

我一直在使用Chase Paymentech作为客户的电子商务网关.最近,他们将托管移至GoDaddy,从那时起,电子商务就一直没有运作.我曾尝试使用Chase和GoDaddy对此进行故障排除,但最终都没有太大帮助.我已经确认,Chase的帐户已附加了GoDaddy托管服务器的新IP.

我从Chase技术支持部门得到的答复是,我的请求从未到达他们的网关.但是当我尝试时,我会得到一个XML响应.

$url = "https://orbital1.paymentech.net"; // use for production


$fltGrandTotal = "1.00";
$exp   = "0117"; 
$strCardNumber = "4242424242424242";
$_SESSION[UUID] = '9999555444';

$fltGrandTotal = str_replace(',', '', $fltGrandTotal); 
$total = number_format($fltGrandTotal, 2);
$total2 = str_replace('.', '', $total); 


$post_string="
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<Request>
<NewOrder>
<IndustryType>EC</IndustryType>
<MessageType>AC</MessageType>
<BIN>000002</BIN>
<MerchantID>XXXXXXX</MerchantID>
<TerminalID>001</TerminalID>
<CardBrand></CardBrand>
<AccountNum>$strCardNumber</AccountNum>
<Exp>$exp</Exp>
<OrderID>$_SESSION[UUID]</OrderID>
<Amount>100</Amount>
<Comments></Comments>
<ShippingRef></ShippingRef>
</NewOrder>
</Request>
";


$header= "POST /authorize/ HTTP/1.0\r\n";       
$header.= "MIME-Version: 1.0\r\n";
$header.= "Content-type: application/PTI43\r\n";
$header.= "Content-length: "  .strlen($post_string) . "\r\n";
$header.= "Content-transfer-encoding: text\r\n";
$header.= "Request-number: 1\r\n";
$header.= "Document-type: Request\r\n";
$header.= "Interface-Version: Test 1.4\r\n";
$header.= "Connection: close \r\n\r\n";                
$header.= $post_string;


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HEADER, false);                
curl_setopt($ch, CURLOPT_CUSTomrEQUEST, $header);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$data = curl_exec($ch);        
if (curl_errno($ch)) {
 //print curl_error($ch);
} else {
 curl_close($ch);
}



$sitemap = simplexml_load_string($data);

foreach($sitemap as $url) {
    $approval = $url->ApprovalStatus;
    $txRefNum = $url->TxRefNum;
    $message = $url->StatusMsg;
    $authcode = $url->AuthCode;
}

echo "approval: $approval<br>";
echo "txRefNum: $txRefNum<br>";
echo "message: $message<br>";
echo "authcode: $authcode<br>";

我收到的XML是:

<?xml version="1.0" encoding="UTF-8"?><Response><QuickResponse HcsTcsInd="T" Version="2">    <ProcStatus>20400</ProcStatus><StatusMsg StatusMsgLth="15">Invalid Request</StatusMsg></QuickResponse></Response>

他们要求我做一些事情,例如设置与以前相同的托管环境,使用完全相同的PHP版本等.我真的不明白为什么这会对事情产生影响.

解决方法:

他们的技术支持(哈!)答案令人误解,因为这样的快速响应甚至都不会记录到他们可以“看到”的系统上.

故意将轨道响应钝化以减轻“黑客网络钓鱼”.为了防止泄漏攻击媒介,任何安全问题都会产生一个简约的错误响应.发生这种情况时,并假设正在合法使用中,请至少验证以下各项:

>发起请求的服务器的IP静态分配.
>发出请求的服务器的IP与商户ID认证期间所使用的IP相同.
>您的商户ID已激活,并且与认证的ID相同.
>提交的交易与经过认证的行业相同.
>您的OrderID是唯一的.提交重复的OrderID将失败.
>提交的XML元素符合PTI版本(也就是上面的“ Content-Type”).
>您的金额包括隐含的小数(由于“金额”字段包含“ 100”,因此上面的示例将被处理为$1.00 USD).
>请勿提交您没有交易内容或不适用于该交易的可选字段(在上述情况下,CardBrand最有可能使请求失败,尽管空的ShippingRef也无济于事).

简而言之,请验证与PTI规范文档一起发送的与所使用的XML版本号相关的每种交易类型.当该文档指示字段为“有条件”时,请确保该条件与您要提交的特定交易相关.如果某个字段记录为“可选”,而您没有任何要提供的内容,则不要包含该字段.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐