2012-07-06 85 views
0

我正嘗試使用發送API請求的汞支付系統,並且我收到付款ID。 根據他們的文檔,在獲得付款ID後,我們必須將其作爲帖子發送到他們的付款過程主機https://hc.mercurydev.net/CheckoutPOS.aspx 我正在重定向到頁面的金額顯示不正確。 有什麼建議嗎?Mercury支付系統

以下是請求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); 
} 

響應我得到一個有效的paymentId,使用paymentId我發佈到支付網關 但適量不填充在支付網關之後。

以下是支付網關的截圖

http://screencast.com/t/FbULkAy01X0L

謝謝

+2

向我們展示一些代碼,請求東西! – 2012-07-06 12:10:56

+0

謝謝您的詢問。你已經很好地解決了這個問題,並提供了很好的例子。只需要更多的數據,我們應該能夠解決這個問題。您可以將您的HTML Form Post發送到[email protected]?通過一些額外的溝通,我相信我們可以更輕鬆地確定問題所在並找到解決方案。謝謝開發人員支持 Mercury Payment Systems – 2012-07-06 23:30:30

+0

您從哪裏得到了示例代碼? – 2014-09-10 17:45:28

回答

2

對於最新的集成MercuryPay的請AKTIVE商戶實現of MercuryPay

一個簡短的例子是如下:

<?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();