4

アプリケーションでは仮想マーチャント支払いゲートウェイを使用しています。

https://www.myvirtualmerchant.com/VirtualMerchant/download/developerGuide.pdf

CCSALEトランザクションを記録しようとしていますが、次のエラーが発生し続けます。

<?xml version="1.0" encoding="UTF-8"?>
<txn><errorCode>6042</errorCode><errorName>Invalid Request Format</errorName><errorMessage>XML request is not well-formed or request is incomplete.</errorMessage></txn>

FiddlerPOSTでリクエストを渡すXMLは次のとおりです。

<txn>
<ssl_merchant_id>my_mer_id</ssl_merchant_id>
<ssl_user_id>my_usr_id</ssl_user_id>
<ssl_pin>my_pin</ssl_pin>
<ssl_test_mode>false</ssl_test_mode>
<ssl_transaction_type>ccsale</ssl_transaction_type>
<ssl_card_number>4111111111111111</ssl_card_number>
<ssl_exp_date>1215</ssl_exp_date>
<ssl_amount>1.00</ssl_amount>
</txn>

マーチャントID、ユーザーID、SSLピンを削除しただけです。残りの情報はそのままです。私はデータを次の場所に投稿しています:https ://demo.myvirtualmerchant.com/VirtualMerchantDemo/processxml.do

XMLがうまく形成されていないと言われる理由を誰かに教えてもらえますか?

4

2 に答える 2

2

まず第一に、何時間もの欲求不満の後、私はこれを行うPHPの方法が非常に遅れていることに気づきました。このXMLエラーは非常に永続的だったので、Coldfusionでこれを試してみたかったのですが、2〜3分ですべてが完了し、XMLエラーも、APIからSSLがらくたも返されませんでした。とにかく、ベントで十分です!これはおそらく、XMLの整形式のスーパーデュパーメッセージを防ぐために必要なものです。

curl_setopt($ch, CURLOPT_POSTFIELDS, array("xmldata=" . $fields_string));

ドキュメントに従っていて、fields_stringに変数を保持していると仮定すると、必要なのはAPIの変数を模倣したものを入力することだけです。この場合、xmldataで十分です。

私はこれを投げる答えをまだ聞いていません:Curl error: SSL read: error:00000000:lib(0):func(0):reason(0), errno 104

これはエラーをリッスンしたおかげです。そうでない場合、XMLエラーを取り除いた後に$resultが空になります。だから、ここに行きます:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array("xmldata=" . $fields_string));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$result = curl_exec($ch);

if(curl_errno($ch))
    echo 'Curl error: ' . curl_error($ch);
else
    echo 'the return is ' . $result;

SSLはまだセットアップされていないのに、なぜ彼らはCURLOPT_SSL_VERIFYPEERとCURLOPT_SSL_VERIFYHOSTに悩まされたのでしょうか。それが間違っていても機能していません、このすべてがチャーリーフォックストロットであることが判明しました!

于 2012-09-01T19:45:17.987 に答える
1

私もこのエラーが発生していました。これが私の動作するcurl関数です

    public function send_curl_xml($xml=NULL){

    $data = http_build_query(array("xmldata"=>$xml));

    $headers = array(
        "Accept: application/xml",
        "Content-type: application/x-www-form-urlencoded"
        //,"Content-length: " . strlen($data)
    );

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

    $response = curl_exec($ch);

    //echo $response;

    if(curl_errno($ch)){
        print curl_error($ch);
        return false;
    } else {
        curl_close($ch);
        return $data;
    }
}

$ xml変数はDOCDocumentオブジェクトです。動的にxmlを生成する場合は、必ず$ xml-> saveHTML()を使用してください(ここで重要なのは、xml文字列の ""行を削除することです)。

于 2019-03-12T17:49:24.460 に答える