symfony4 - 我如何在 Symfony 项目中实现 aZarinpal 网关?
问题描述
我想在我的 Symfony 项目中放置一个 zarinpal 网关我使用了 zarinpal/zarinpal网关,但是我在验证支付时得到 -11 错误号这个错误是针对无法访问的请求,有没有人可以帮助我?
解决方案
经过多次尝试,我发现这个库有问题并自己尝试以下代码对我有用,你应该只确保soap_client在你的电脑上可用
public function ZarinpalRequest($price, $size, $cardID)
{
$session = new Session();
$session->start();
/*zarinpal copy code*/
$MerchantID = 'xxxxxxxxxxxxxxxxxxxxxx'; //Required
$amount = ((int)$price);
$Description = 'test desc';
$Email = 'example@gmaol.com';
//callback url most be absolute url
$CallbackURL = $this->generateUrl('verifyTemplate', array(), UrlGeneratorInterface::ABSOLUTE_URL);
//this is sandbox mode gateway address
$client = new \SoapClient('https://sandbox.zarinpal.com/pg/services/WebGate/wsdl', ['encoding' => 'UTF-8']);
$result = $client->PaymentRequest(
[
'MerchantID' => $MerchantID,
'Amount' => $amount,
'Description' => $Description,
'Email' => $Email,
'CallbackURL' => $CallbackURL,
]
);
if ($result->Status == 100) {
$session->set('amount',$amount);
$session->set('authority',$result->Authority);
$session->set('cardID',$cardID);
$session->set('checked',true);
return new RedirectResponse("https://sandbox.zarinpal.com/pg/StartPay/".$result->Authority);
} else {
dd('ERR: ' . $result->Status) ;
}
}
public function ZarinpalResponse()
{
$session = new Session();
$session->start();
$MerchantID = 'xxxxxxxxxxxxxxxxxxxxx';
$Amount = $session->get('amount');
$check = $session->get('checked');
$Authority = $_GET['Authority'];
if ($_GET['Status'] == 'OK') {
$client = new \SoapClient('https://sandbox.zarinpal.com/pg/services/WebGate/wsdl', ['encoding' => 'UTF-8']);
$result = $client->PaymentVerification(
[
'MerchantID' => $MerchantID,
'Authority' => $Authority,
'Amount' => $Amount,
]);
if ($result->Status == 100 && $check ) {
$repository=$this->getDoctrine()->getRepository(Carts::class);
$cart=$repository->find($cardID);
if ($cart!==null){
//this is transaction number and should save it
$refid=$result->RefID
$this->sendEmail($cardID,$this->mailer,$this->helper);
$session->clear();
}
return $this->render('verify.twig',array('refID'=>$result->RefID));
} else {
return new Response('Transaction failed. Status:' . $result->Status) ;
}
} else {
return new Response('Transaction canceled by user') ;
}
}
并且在您的代码中仅使用正确的参数调用 ZarrinpalRequest
推荐阅读
- amazon-web-services - 用于 DynamoDB LeadingKeys 限制的 IAM 策略 Cognito 变量
- bash - add answer to first commands question in shell script
- php - 当多个输入具有相同名称时,根据输入类型设置 jquery 表单验证
- java - 在具有 2 个外键的模型中找不到 ParentKey
- sql-server - 在 spark 中从 sql server 并行读取
- ios - iOS 13 beta 中 WKWebView 的内在内容大小问题
- python - 无法解释使用 tensorflow 创建 LSTM 单元的 Python 代码行
- bash - 可以在不保存为文件的情况下键入和执行 shell 脚本吗?
- swift - 快速覆盖方法
- javascript - 如何将谷歌课堂 API 与 express 一起使用?