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

Chasepaymentech轨道网关-PHP中的电子商务问题,php,api,Php,Api,我一直在使用Chase Paymentech作为客户的电子商务网关。最近,他们把他们的主机转移到GoDaddy,从那以后,电子商务就一直不起作用了。我曾尝试与Chase和GoDaddy一起解决这个问题,但最终都没有多大帮助。我已经确认Chase将GoDaddy托管服务器的新IP连接到我的帐户 我从Chase技术支持部门得到的答复是,我的请求从未到达他们的网关。然而,当我尝试时,会得到一个XML响应 $url = "https://orbital1.paymentech.net"; // use

我一直在使用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>";
$url=”https://orbital1.paymentech.net"; // 用于生产
$FLTGRANDTOTALL=“1.00”;
$exp=“0117”;
$strCardNumber=“4242”;
$_SESSION[UUID]=“999555444”;
$FLTGRANDTOTALL=str_替换(“,”,“,$FLTGRANDTOTALL);
$total=数字\单位格式($fltGrandTotal,2);
$total2=str_替换('.','.$total);
$post_字符串=”
欧共体
自动控制
000002
XXXXXXX
001
$strCardNumber
$exp
$\u会话[UUID]
100
";
$header=“POST/authorize/HTTP/1.0\r\n”;
$header.=“MIME版本:1.0\r\n”;
$header.=“内容类型:应用程序/PTI43\r\n”;
$header.=“内容长度:”.strlen($post_字符串)。“\r\n”;
$header.=“内容传输编码:文本\r\n”;
$header.=“请求编号:1\r\n”;
$header.=“文档类型:请求\r\n”;
$header.=“接口版本:测试1.4\r\n”;
$header.=“连接:关闭\r\n\r\n”;
$header.=$post\u字符串;
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$URL);
curl_setopt($ch,CURLOPT_超时,20);
curl_setopt($ch,CURLOPT_头,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\u exec($ch);
if(旋度误差($ch)){
//打印卷曲错误($ch);
}否则{
卷曲关闭($ch);
}
$sitemap=simplexml\u load\u字符串($data);
foreach($url形式的站点地图){
$approval=$url->ApprovalStatus;
$txRefNum=$url->txRefNum;
$message=$url->StatusMsg;
$authcode=$url->authcode;
}
回显“批准:$approval
”; 回显“txRefNum:$txRefNum
”; 回显“消息:$message
”; 回显“authcode:$authcode
”;
我收到的返回的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>
20400无效请求
他们让我做一些事情,比如像以前一样设置相同的托管环境,使用完全相同的PHP版本,等等。我真的不明白为什么这会对事情有任何影响。

他们的技术支持(哈!)回答是误导性的,因为像这样的快速响应甚至不会登录到他们可以“看到”的系统

轨道响应故意迟钝,以减轻“黑客钓鱼”。为了防止泄露攻击向量,任何安全问题都会产生最低限度的错误响应。发生这种情况时,假设合法使用正在发挥作用,请至少验证以下内容:

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

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

停留在同一点上。如果你有解决办法,请告诉我。