[英]PHP+BillDesk payment gateway integration issue
我正在尝试将 BillDesk 支付网关与我的 PHP 网站集成。 运行简单的 PHP 代码时出现以下错误
{"status":422,"error_type":"invalid_data_error","error_code":"GNIDE0004","message":"Invalid Content-type header"}
这是我的 PHP 代码。 请注意,这仅用于测试目的
<?php
$str = "<MerchantId>|order45608988|NA|300.00|NA|NA|NA|INR|NA|TypeField1|<ClientID>|NA|NA|TypeField2|Txtadditionalinfo1|Txtadditionalinfo2|http://google.com";
$checksum = hash_hmac('sha256',$str,"<secretkey>", false);
$checksum_value = strtoupper($checksum);
echo '<form action="https://pguat.billdesk.io/payments/ve1_2/orders/create" method="post" id="billdesk_payment_form">';
echo '<input type="hidden" name="MerchantId" value="<MerchantId>"/>';
echo '<input type="hidden" name="CurrencyType" value="INR"/>';
echo '<input type="hidden" name="SecurityId" value="<ClientID>"/>';
echo '<input type="hidden" name="txtCustomerID" value="order45608988" />';
echo '<input type="hidden" name="txtTxnAmount" value="300.00" />';
echo '<input type="hidden" name="txtAdditionalInfo1″ value="" />';
echo '<input type="hidden" name="RU" value="http://returnURL.com" />';
echo '<input type="hidden" name="CheckSumKey" value="<secretkey>"/>';
echo '<input type="hidden" name="CheckSum" value="'.$checksum_value.'"/>';
echo '<input type="hidden" name="msg" value="'.$str.'" />';
echo '</form>';
echo '<script>document.getElementById("billdesk_payment_form").submit();</script>';
?>
我已经参考了 BillDesk 文档,但我并没有得到我必须做的确切更改。
先感谢您。
/* Billdesk has changed payment gateway. sample as given below */
/****
config.php
*****/
$MerchantID = "ABCDEF01";
$ClientID = "abcdef01";
$responseurl = "https://www.merchantwebsite.com/ru.php";
$secretkey = 'xxxxxxxxxxxxxxxxxxxxxxxx';
$returnURL = "https://www.merchantwebsite.com/paymentresponse.php";
$billdesk_URL = "https://pguat.billdesk.io/payments/ve1_2/orders/create";
/****
process.php
*****/
use Firebase\JWT\JWT;
/*****************************************/
// Build headers
/*****************************************/
$headers = ["alg" => "HS256", "clientid" => $ClientID, "kid" => "HMAC"];
$payload = [
"mercid" => $MerchantID,
"orderid" => $transaction_id,
"amount" => $totalamount,
"order_date" => $date_atom,
"currency" => "356",
"ru" => $responseurl,
"additional_info" => [
"additional_info1" => $CustomerID,
"additional_info2" => $PaymentFor,
"additional_info3" => "NA",
"additional_info4" => "NA",
"additional_info5" => "NA",
"additional_info6" => "NA",
"additional_info7" => "NA",
],
"itemcode" => "DIRECT",
"device" => [
"init_channel" => "internet",
"ip" => $ipaddress,
"mac" => $macaddress,
"imei" => $imei,
"accept_header" => "text/html",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0",
"fingerprintid" => $fingerprintid
]
];
/*****************************************/
// Encode payload
/*****************************************/
$curl_payload = JWT::encode($payload, $secretkey, "HS256", null ,$headers);
/*****************************************/
// Submit to Billdesk
/*****************************************/
$ch = curl_init( $billdesk_URL );
$ch_headers = array(
"Content-Type: application/jose",
"accept: application/jose",
"BD-Traceid: $transaction_id",
"BD-Timestamp: $servertimeYYYYMMddHHmmss"
);
curl_setopt( $ch, CURLOPT_HTTPHEADER, $ch_headers);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt( $ch, CURLOPT_POSTFIELDS, $curl_payload);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$result = curl_exec($ch);
curl_close($ch);
/*****************************************/
// Billdesk Response
/*****************************************/
$launch_billdesk = false;
try {
$result_decoded = JWT::decode($result, $secretkey, array('HS256'));
$result_array = (array) $result_decoded;
if ($result_decoded->status == 'ACTIVE') {
$transactionid = $result_array['links'][1]->parameters->bdorderid;
$authtoken = $result_array['links'][1]->headers->authorization;
$launch_billdesk = true; //write js code to launch sdk
} else { // Response error
echo "Response error";
}
} catch (\Exception $e) {
echo "<br><br>Return signature validation FAILED: $e";
}
/****
paymentresponse.php
*****/
use Firebase\JWT\JWT;
/*****************************************/
// Read POST data
/*****************************************/
$tx = "";
if(!empty($_POST)) {
$tx_array = $_POST;
if (isset($tx_array['transaction_response'])) {
$tx = $tx_array['transaction_response'];
}
} else {
echo "<br><br>Invalid call<br>";
die();
}
/*****************************************/
// Signature validation
/*****************************************/
try {
$result_decoded = JWT::decode($tx, $secretkey, array('HS256'));
$result_array = (array) $result_decoded;
$result_json = json_encode($result_array,JSON_PRETTY_PRINT);
} catch (\Exception $e) {
//echo $e;
echo "<br><br>Invalid response<br>";
die();
}
/*****************************************/
// Process info
/*****************************************/
if ($result_decoded->transaction_error_type == 'success') {
$orderid = $result_decoded->orderid;
$transaction_date = $result_decoded->transaction_date;
$transactionid = $result_decoded->transactionid; //payment transaction id
$charge_amount = $result_decoded->charge_amount;
/* SAVE TO DB and send receipt */
$success = updateTransactionToDB($result_array);
GenerateReceiptEmail($orderid, 1, $draftreceipt);
echo "<h2>Transaction was successful....</h2>";
echo "Transaction Date: $transaction_date<br>";
echo "Transaction ID: $transactionid<br>";
echo "Charge Amount: ₹$charge_amount<br>";
} else { // Error
$txerror = $result_decoded->transaction_error_type;
$txid = $result_decoded->transactionid;
echo "<h2>Transaction FAILED....</h2>";
echo "Transaction Date: $transaction_date<br>";
echo "Transaction ID: $transactionid<br>";
echo "Charge Amount: ₹$charge_amount<br>";
echo "Failure Reason: ₹$transaction_error_desc<br>";
}
不适合我。 您使用了很多参数,但没有在任何地方定义。 你能在这里分享完整的代码吗
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.