Comprendre la fonction de paiement web Alipay implémentée en PHP [basé sur le framework TP5]

coldplay.xixi
Libérer: 2023-04-09 12:14:01
avant
3016 Les gens l'ont consulté

Comprendre la fonction de paiement web Alipay implémentée en PHP [basé sur le framework TP5]

Cet article décrit la fonction de paiement web Alipay implémentée en PHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

1. Soumettre la demande de paiement

require_once './payment/zfb/pagepay/service/AlipayTradeService.php';
require_once './payment/zfb/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';
$payInfo=Db::name('pay_type')->where(['pay_id'=>1])->find();
$zfb=json_decode($payInfo['pay_json'],true);
$config=[
  'app_id'=>$zfb['app_id'],
  'merchant_private_key'=>$zfb['merchant_private_key'],
  'notify_url'=>config('z_notify_url'),
  'return_url'=>config('z_return_url'),
  'charset'=>config('charset'),
  'sign_type'=>config('sign_type'),
  'gatewayUrl'=>config('gatewayUrl'),
  'alipay_public_key'=>$zfb['alipay_public_key']
];
//商品订单号
$out_trade_no=$orderData['order_number'];
//订单名称,必填
$subject='充值订单';
//付款金额
$total_amount=$money;
//商品描述
$body = $out_trade_no . '-' . $this->agent_id.'-'.$money;
$payRequestBuilder = new \AlipayTradePagePayContentBuilder();
$payRequestBuilder->setBody($body);
$payRequestBuilder->setSubject($subject);
$payRequestBuilder->setTotalAmount($total_amount);
$payRequestBuilder->setOutTradeNo($out_trade_no);
$aop = new \AlipayTradeService($config);
$response = $aop->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']);
echo $response;
Copier après la connexion

2. Authentification des paramètres Alipay de rappel asynchrone<🎜. >

$pay=Db::name(&#39;pay_type&#39;)->where([&#39;pay_id&#39;=>1])->find();
  $zfb=json_decode($pay[&#39;pay_json&#39;],true);
  $config = [
    &#39;app_id&#39; => $zfb[&#39;app_id&#39;],
    &#39;merchant_private_key&#39; => $zfb[&#39;merchant_private_key&#39;],
    &#39;notify_url&#39; => config(&#39;z_notify_url&#39;),
    &#39;return_url&#39; => config(&#39;z_return_url&#39;),
    &#39;charset&#39; => config(&#39;charset&#39;),
    &#39;sign_type&#39; => config(&#39;sign_type&#39;),
    &#39;gatewayUrl&#39; => config(&#39;gatewayUrl&#39;),
    &#39;alipay_public_key&#39; => $zfb[&#39;alipay_public_key&#39;]
  ];
  $arr=$_POST;
  $alipaySevice = new \AlipayTradeService($config);
  $alipaySevice->writeLog(var_export($_POST,true));
  $result = $alipaySevice->check($arr);
  /* 实际验证过程建议商户添加以下校验。
  1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
  2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
  3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方
  (有的时候,一个商户可能有多个seller_id/seller_email)
  4、验证app_id是否为该商户本身。
  */
  if($result) {//验证成功
    ////////////////////////////////////////////////////////////////////////////////
    //请在这里加上商户的业务逻辑程序代
    //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
    //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
    //商户订单号
    $out_trade_no = $_POST[&#39;out_trade_no&#39;];
    //支付宝交易号
    $trade_no = $_POST[&#39;trade_no&#39;];
    //交易状态
    $trade_status = $_POST[&#39;trade_status&#39;];
    //交易金额
    $total_amount = $_POST[&#39;total_amount&#39;];
    if($_POST[&#39;trade_status&#39;] == &#39;TRADE_FINISHED&#39;) {
      //判断该笔订单是否在商户网站中已经做过处理
      //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,
      并执行商户的业务程序
      //请务必判断请求时的total_amount与通知时获取的total_fee为一致的
      //如果有做过处理,不执行商户的业务程序
      //注意:
      //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
    } else if ($_POST[&#39;trade_status&#39;] == &#39;TRADE_SUCCESS&#39;) {
      //判断该笔订单是否在商户网站中已经做过处理
      //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,
      并执行商户的业务程序
      //请务必判断请求时的total_amount与通知时获取的total_fee为一致的
      //如果有做过处理,不执行商户的业务程序
      //注意:
      //付款完成后,支付宝系统发送该交易状态通知
      //此处应该更新一下订单状态,商户自行增删操作
       这里写你的逻辑程序
    }
    //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
    echo &#39;success&#39;;
  }else {
    //验证失败
    echo "fail";
  }
}
Copier après la connexion

3. Traitement synchrone des sauts de page de rappel La synchronisation effectue uniquement un traitement de saut et n'écrit aucun traitement de données

$pay=Db::name(&#39;pay_type&#39;)->where([&#39;pay_id&#39;=>1])->find();
$zfb=json_decode($pay[&#39;pay_json&#39;],true);
$config = [
  &#39;app_id&#39; => $zfb[&#39;app_id&#39;],
  &#39;merchant_private_key&#39; => $zfb[&#39;merchant_private_key&#39;],
  &#39;notify_url&#39; => config(&#39;z_notify_url&#39;),
  &#39;return_url&#39; => config(&#39;z_return_url&#39;),
  &#39;charset&#39; => config(&#39;charset&#39;),
  &#39;sign_type&#39; => config(&#39;sign_type&#39;),
  &#39;gatewayUrl&#39; => config(&#39;gatewayUrl&#39;),
  &#39;alipay_public_key&#39; => $zfb[&#39;alipay_public_key&#39;]
];
$arr=$_GET;
$alipaySevice = new \AlipayTradeService($config);
$result = $alipaySevice->check($arr);
/* 实际验证过程建议商户添加以下校验。
1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方
(有的时候,一个商户可能有多个seller_id/seller_email)
4、验证app_id是否为该商户本身。
*/
if($result) {//验证成功
  ///////////////////////////////////////////////////////////////////////////////
  //请在这里加上商户的业务逻辑程序代码
  //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
  //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表
  //商户订单号
  $out_trade_no = htmlspecialchars($_GET[&#39;out_trade_no&#39;]);
  //支付宝交易号
  $trade_no = htmlspecialchars($_GET[&#39;trade_no&#39;]);
  $this->success("支付成功",url(&#39;Index/index&#39;));
  //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
  ///////////////////////////////////////////////////////////////////////////
}
else {
  //验证失败
  echo "验证失败";
}
Copier après la connexion
Recommandations d'apprentissage associées :

Programmation PHP du Débutant au Maître

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:jb51.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!