我在我的网站中集成了一个支付网关,并且支付网关启动是通过包含隐藏字段的表单完成的,以发布数据。
表单的HTML代码是:(仅粘贴HTML代码无法共享详细信息,因为API支持不好,并且由于5-10个频繁请求,他们还删除了我的沙盒商店ID。)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Easypay</title>
</head>
<body>
<form action="https://easypaystg.easypaisa.com.pk/easypay/Index.jsf" method="POST" id="easyPayStartForm" target="_blank">
<input name="storeId" value="<?php echo $storeId; ?>" hidden = "true"/>
<input name="amount" value="<?php echo $amount; ?>" hidden = "true"/>
<input name="postBackURL" value="<?php echo $postBackURL; ?>" hidden = "true"/>
<input name="orderRefNum" value="<?php echo $orderRefNum; ?>" hidden = "true"/>
<input type ="text" name="expiryDate" value="<?php echo $expiryDate; ?>">
<input type="hidden" name="autoRedirect" value="<?php echo $autoRedirect; ?>" >
<input type ="hidden" name="paymentMethod" value="<?php echo $paymentMethod; ?>">
<input type ="hidden" name="emailAddr" value="<?php echo $emailAddr; ?>">
<input type ="hidden" name="mobileNum" value="<?php echo $mobileNum; ?>">
<input type ="hidden" name="merchantHashedReq" value="<?php echo $hashRequest; ?>">
<button type="submit">Submit</button>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我提交表单时,它会将我重定向到支付门户,并在成功交易后将我抛回回发 URL。
通过表单的支付网关工作正常,但由于表单将包含敏感网关 API 的详细信息,因此我尝试通过后端的 PHP Curl 请求发布表单数据以进行安全交易。但是当我尝试使用PHPcurl 请求时,它显示了一个无效的请求:
以下是我的PHP卷曲请求代码:
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://easypay.easypaisa.com.pk/easypay/Index.jsf",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "storeId=$storeId&amount=$amount&postBackURL=$postBackURL&orderRefNum=$orderRefNum&expiryDate=$expiryDate&autoRedirect=$autoRedirect&paymentMethod=$paymentMethod&emailAddr=$emailAddr&mobileNum=$mobileNum&merchantHashedReq=$merchantHashedReq",
CURLOPT_HTTPHEADER => array(
"Content-Type: application/x-www-form-urlencoded"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
Run Code Online (Sandbox Code Playgroud)
我将以下 python 请求(他们在他们的文档中给出)更改为 PHP Curl 请求:
(数据是虚拟的,因此请求不会成功,请不要尝试运行此代码,它仅用于python,我已将其转换为PHP CURL 请求)
import httplib,urllib
host='https://easypay.easypaisa.com.pk'
url ='/easypay/Index.jsf'
values ={'storeId':'43','amount':'10','postBackURL':'http://www.my.online-store.com/transaction/MessageHandler','orderRefNum':'1101','expiryDate':'20140606201521',‘merchantHashedReq’=> ‘aasldfjlaksdjf;laksjdf;asdf--=====’,‘autoRedirect’=> ‘0’,‘paymentMethod’=> ‘OTC_PAYMENT_METHOD’,‘emailAddr’=> ‘test.abcd@domain.com’,‘mobileNum’=> ‘03321041021’}
headers={'User-Agent': 'python','Content-Type':'application/x-www-form-urlencoded',}
values =urllib.urlencode(values)
conn = httplib.HTTPSConnection(host)
conn.request("POST",url,values,headers)
response =conn.getresponse()data=response.read()
Run Code Online (Sandbox Code Playgroud)
creatinf 时我做错了PHP curl request什么吗?
如果你想设置CURLOPT_POSTFIELDS为字符串,你需要对值进行 url 编码,使用数组更容易、更干净,你还需要使用该选项CURLOPT_POST => true
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => [
'storeId' => $storeId,
'amount' => $amount,
'postBackURL' => $postBackURL,
'orderRefNum' => $orderRefNum,
'expiryDate' => $expiryDate,
'autoRedirect' => $autoRedirect,
'paymentMethod' => $paymentMethod,
'emailAddr' => $emailAddr,
'mobileNum' => $mobileNum,
'merchantHashedReq' => $merchantHashedReq
],
Run Code Online (Sandbox Code Playgroud)