0

APIリクエストを送信する水銀支払いシステムを使用しようとしていますが、その代わりに支払いIDを取得しています。彼らのドキュメントによると、支払い ID を取得した後、支払いプロセス ホストhttps://hc.mercurydev.net/CheckoutPOS.aspx にポストとして送信する必要があります。金額が正しく表示されないページにリダイレクトされます。助言がありますか?

以下はリクエストAPIです

function get_ms_payment_id($ms_merchant_id,$ms_password,$order_header_id,$amount,$tax,$success_url,$failure_url)
{
    $soap_request = '<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">';
    $soap_request .= '<SOAP-ENV:Body>';
    $soap_request .= '<InitializePayment xmlns="http://www.mercurypay.com/">';
    $soap_request .= '<request> ';
    $soap_request .= '<MerchantID>'.$ms_merchant_id.'</MerchantID> ';
    $soap_request .= '<Password>'.$ms_password.'</Password> ';
    $soap_request .= '<Invoice>'.$order_header_id.'</Invoice> ';
    $soap_request .= '<TotalAmount>50.23</TotalAmount>';
    $soap_request .= '<TaxAmount>'.$tax.'</TaxAmount>';
    $soap_request .= '<TranType>Sale</TranType> ';
    $soap_request .= '<Frequency>OneTime</Frequency>';
    $soap_request .= '<Memo>Your Memo</Memo> ';
    $soap_request .= '<PartialAuth>Off</PartialAuth> ';
    $soap_request .= '<ProcessCompleteUrl>'.$success_url.'</ProcessCompleteUrl> ';
    $soap_request .= '<ReturnUrl>'.$failure_url.'</ReturnUrl> ';
    $soap_request .= '<DisplayStyle>Custom</DisplayStyle>';
    $soap_request .= '<BackgroundColor>Gray</BackgroundColor>';
    $soap_request .= '<FontColor>Black</FontColor>';
    $soap_request .= '<FontFamily>FontFamily1</FontFamily>';
    $soap_request .= '<FontSize>Medium</FontSize>';
    $soap_request .= '<PageTitle>Demo Ecommerce Merchant</PageTitle>';
    $soap_request .= '<SecurityLogo>on</SecurityLogo>';
    $soap_request .= '<OrderTotal>on</OrderTotal>';
    $soap_request .= '<SubmitButtonText>Submit</SubmitButtonText>';
    $soap_request .= '<CancelButtonText>Cancel</CancelButtonText>';
    $soap_request .= '</request> ';
    $soap_request .= '</InitializePayment>';
    $soap_request .= '</SOAP-ENV:Body>';
    $soap_request .= '</SOAP-ENV:Envelope>';

    $header = array("POST /ws/ws.asmx HTTP/1.1", 
        "Host: w1.mercurypay.com", 
        "Content-Type: text/xml; charset=utf-8",
        "SOAPAction: \"http://www.mercurypay.com/InitializePayment\"");

    $url = "https://hc.mercurydev.net/hcws/hcservice.asmx";

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 4);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $soap_request);

    $result = curl_exec($ch);

    include_once('xml.php');
    $x_data = XML_unserialize($result);

    $x_data = $x_data["soap:Envelope"];
    $x_data = $x_data["soap:Body"];
    $x_data = $x_data["InitializePaymentResponse"];
    $result = $x_data["InitializePaymentResult"];

    return($result);
}

それに応じて、有効な支払いIDを取得しています。支払いIDを使用した後、支払いゲートウェイに投稿しましたが、支払いゲートウェイに適切な金額が入力されていません。

以下は、支払いゲートウェイのスクリーンショットです

http://screencast.com/t/FbULkAy01X0L

ありがとうございました

4

1 に答える 1

2

MercuryPay の最新の統合については、MercuryPay の Aktive-Merchant 実装を確認してください

短い例は次のとおりです。

<?php
use AktiveMerchant\Billing\Base; //Use Base class
use AktiveMerchant\Billing\Mercury; //Use Mercury gateway
use AktiveMerchant\Billing\CreditCard;

Base::mode('test') // Remove this on production mode

$gateway = new Mercury(array('login'=>'<login>', 'password'=>'<password>'));

$credit_card = new CreditCard( 
    array(
        "first_name" => "John",
        "last_name" => "Doe",
        "number" => "41111111111111",
        "month" => "12",
        "year" => "2012",
        "verification_value" => "123"
    )
);

$credit_card->isValid(); // Returns true or false

# Extra options for transaction
$options = array(
    'order_id' => 'REF' . $gateway->generateUniqueId(),
    'description' => 'Test Transaction',
    'address' => array(
        'address1' => '1234 Street',
        'zip' => '98004',
        'state' => 'WA'
    )
);

$amount = 100; #100 cents 1.00 dollars

# Authorize transaction
$response = $gateway->authorize($amount, $credit_card, $options);
if ( $response->success() ) {
    echo 'Success Authorize';
} else {
    echo $response->message();
}

トランザクションから PaymentId を次のように取得できます。

$response->authorization();

于 2016-07-29T12:17:16.830 に答える