2012-03-03 9 views
2

私はこのAPIファイルを使用して私のHSBC銀行の処理のために、私は他の2つのサイトで失敗しているが、なぜ。私のWeb開発者は困惑しているとテストファイルを作成することを決めた、ここでテストファイルからのコードです: 支払処理:受信したHTTPメソッドが無効です。唯一のPOSTが受け入れられる

<?php 
echo "payment processing..."; 
$amount = 100;// round($_POST["realamount"], 2) * 100; 
$fullName = "test";//$_POST['name']; 
$Address1 = "test";//$_POST['address1']; 
$Address2 = "test";//$_POST['address2']; 
$city ="test";// $_POST['city']; 
$county = $city; 
$postcode = "test";//$_POST['zipcode']; 
$country = "GRB";//$_POST['country']; 

$phone = "test";//$_POST['telephone']; 
$email = "[email protected]";//$_POST['emailaddress'];  

$cardNumber = "337877666233434";//$_POST['cardNumber']; 
$cardExp = "03/2011";//$_POST['ccmonth'] . "/" . substr($_POST["ccyear"],2,2); 
$cvdIndicator = "111";//$_POST['cvdIndicator']; 
$cvdValue = "111";//$_POST['cvdValue']; 
$issueNumber = "111";//$_POST['issueNumber']; 
$cardType = "VI";//$_POST['cardType']; 


$testRead = "<?xml version='1.0' encoding='UTF-8'?> 
<EngineDocList> 
<DocVersion>1.0</DocVersion> 
<EngineDoc> 
    <ContentType>OrderFormDoc</ContentType> 
    <User> 
     <Name>xxx</Name> 
     <Password>xxx</Password> 
     <ClientId>xxx</ClientId>   
    </User> 
    <Instructions> 
     <Pipeline>PaymentNoFraud</Pipeline> 
    </Instructions> 
    <OrderFormDoc> 
     <Mode>P</Mode> 
     <Comments/> 
     <Consumer> 
      <Email/> 
      <PaymentMech> 
       <CreditCard> 
        <Number>".$cardNumber."</Number> 
        <Expires DataType='ExpirationDate' Locale='840'>".$cardExp."</Expires> 
        <Cvv2Val>".$cvdValue."</Cvv2Val> 
        <Cvv2Indicator>".$cvdIndicator."</Cvv2Indicator> 
        <IssueNum>".$issueNumber."</IssueNum> 
       </CreditCard> 
      </PaymentMech> 
     </Consumer> 
     <Transaction> 
      <Type>Auth</Type> 
      <CurrentTotals> 
       <Totals> 
        <Total DataType='Money' Currency='826'>".$amount."</Total> 
       </Totals> 
      </CurrentTotals> 
     </Transaction> 
    </OrderFormDoc> 
</EngineDoc> 
    </EngineDocList>"; 
?> 
<?php 


//$url = "https://www.uat.apixml.netq.hsbc.com"; 
$url = "https://www.secure-epayments.apixml.hsbc.com/"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_POST,1); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$testRead); 
curl_setopt($ch, CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
$result_tmp = curl_exec ($ch); 
curl_close ($ch); 
/////////////////////////////////////// 
// use XML Parser result 
    $xml_parser = xml_parser_create(); 
    xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,0); 
    xml_parser_set_option($xml_parser,XML_OPTION_SKIP_WHITE,1); 
    xml_parse_into_struct($xml_parser, $result_tmp, $vals, $index); 
    xml_parser_free($xml_parser);  

//print_r($vals); // print all the arrays. 
//print_r($vals[29]); // print only the selected array. 
$val1 = $vals[21]; 
// ProcReturnMsg 
$paymentResult = $val1[value]; 


$result_tmp = ""; 
$k=0; 
$findthis = false; 
$findthis2 = false; 
foreach ($vals as $val) { 
$result_tmp.= $k."{"; 
foreach($val as $d => $a) { 
     $result_tmp.="[".$d."]".$a; 
     if($d=="tag" && $a=="TransactionStatus"){ 
      $findthis = true; 
     } 
     if($d=="value" && $findthis){ 
      $tResult = $a; 
      $findthis = false; 
     } 

     if($d=="tag" && $a=="Text"){ 
      $findthis2 = true; 
     } 
     if($d=="value" && $findthis2){ 
      $tResult2 = $a; 
      $findthis2 = false; 
     } 

} 
$result_tmp.= "}"; 
$k++; 

} 


echo $tResult2.$tResult; 

?> 

ここでは、サイトの1が出力されるgs.net を働いていないの例です。 ..受信したHTTPメソッドが有効ではありません。 POSTのみが受け入れられます。 ... HGL working example ここで出力された決済処理カードの種類を判別できません:私はのような私の他のWebホストの一部にこれと同じファイルをアップロードするときには

。 ( 'length' is '15')E これはエラーメッセージのように聞こえるが、基本的にはエラーは重要ではないので、後者は最初のリンクで達成しようとしているものである。

私はこのファイルを私のいくつかの基本的なホスティングアカウントにアップロードしていますが、時にはうまくいきませんので、ホスティング会社が許可しているかどうか、オフ。

どのようなアイデアをお願いしますか?

ありがとう

+0

実際の生産コードですか?つまり、POST varsをプレーンテキストとしてXMLに貼り付けていますか?注射の欠陥は、ハッキングのために熟しています。 – Hamish

+0

あなたが何を意味するかはっきりしていませんが、これはテストファイルです。カード番号などの上部の情報です。私はあなたが実際にファイルには含まれていないことを意味します。 – user1171523

+0

'$ testRead'変数の評価された内容を取って、それをコマンドラインcurlのような他のメソッドを使って' $ url'にPOSTリクエストとして送り、成功した応答を受け取ることができますか?おそらくPHPからの奇妙な応答を引き起こすPHPの引用問題にぶち当たっているかもしれません。 – imm

答えて

7

これは、サーバーに適用されたPHPのアップグレードによって発生したと思われ、私を夢中にしていました。

解決策は、CURL接続を指定するときに次のSSLオプションを設定することです。

curl_setopt($ch, CURLOPT_SSLVERSION, 3); 
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'RC4-MD5'); 
+0

あなたは絶対的な美しさです。私は彼らがPHPをアップグレードしたかどうか私の様々なホスティング会社に尋ねてきたし、彼らは私に言った。私のウェブサイトを別のホストに移動させてしまったので解決しましたが、もちろん一時的でした! 私はあなたの修正を試み、それは魔法のように動作します。これは私に失われた注文の運を要した。あなたはどのように修正プログラムを見つけましたか?私はそれについてのすべてのページをgoogledと思われた。 – user1171523

+0

私はこの答えのためにあなたを愛していると思います! –

+0

この修正プログラムがどのように見つかったか知りたいですか? – rikkiloades

0

スターターとして動作しないサーバーでcurlが有効になっているかどうかを確認します。チェックするにはphiinfo()関数を使用します。

+0

あなたがチェックしても大丈夫ならば、私はこれをやったことがあります。ここにファイルがあります:http://www.glowsticks.net/php.php – user1171523

+0

私はカールエラースクリプトを実行しましたが、エラーも表示されません私は物事のカール側が大丈夫だと思う。 – user1171523

+0

APIのドキュメントでは、そのエラーが返されたときの説明をこれ以上説明しませんか?彼らのAPIがそのエラーを生成しているので、私は彼らのサポート部門に連絡し、彼らのドキュメンテーションでそれに関する詳細情報を調べることを試みるでしょう。あなたがそれらのドメインを登録する必要があるかどうか、またはスクリプトが正しく機能するために何かを必要としているかどうか不思議です。 – Rooster

関連する問題