Maison  >  Article  >  développement back-end  >  Comment intégrer le paiement Alipay APP dans le serveur PHP

Comment intégrer le paiement Alipay APP dans le serveur PHP

不言
不言original
2018-07-03 16:57:331442parcourir

Ce qui suit est un exemple de paiement de serveur PHP intégré à l'application Alipay. Il a une bonne valeur de référence et j'espère qu'il sera utile à tout le monde. Jetons un coup d'œil ensemble

Le paiement Alipay est divisé en de nombreux scénarios. Ici, nous décrivons uniquement l'intégration de la fonction de paiement Alipay APP Au cours du processus, nous avons rencontré des pièges particulièrement importants, je vais donc décrire brièvement le processus d'intégration et. décrire les problèmes rencontrés. Et les solutions

Étant donné que l'activité de l'entreprise est simple et ne prend en charge que le paiement Alipay, il n'est pas nécessaire de se soucier des fonctions supplémentaires telles que les remboursements, les demandes de renseignements, etc., cet article décrit donc uniquement comment le Le serveur prépare l'application à extraire les ordres de paiement lors de l'utilisation de l'interface de paiement Alipay. Le processus général est le suivant

1. Créer une application et une configuration

Tout d'abord, vous devez vous rendre sur la plateforme de développement Ant Financial (open.alipay.com) pour enregistrer l'application, obtenir l'ID de l'application et configurer l'application. La configuration ici implique principalement la signature d'un contrat, générant le RSA2 public et privé. clés de l'application et obtention de la clé publique de paiement fournie par Alipay. Il y a des invites en arrière-plan de cette partie du site officiel, ce qui est relativement simple

2. SDK correspondant

Ici j'intègre le service en arrière-plan PHP, j'ai donc téléchargé le SDK PHP, adresse : https://docs.open.alipay.com/54/103419/

3. Préparer un nom de domaine réel accessible

Cas

Une fois les trois étapes ci-dessus terminées, nous pouvons maintenant configurer notre propre code commercial

4.1 Organiser le paiement APP Informations sur la commande de paiement au moment

<?php

require_once (__DIR__.&#39;/alipay-sdk-PHP-20171023143822/AopSdk.php&#39;);

class Alipay
{
 /**
 * 应用ID
 */
 const APPID = &#39;你的应用ID&#39;;
 /**
 *请填写开发者私钥去头去尾去回车,一行字符串
 */
 const RSA_PRIVATE_KEY = &#39;应用对应开发者私钥&#39;;
 /**
 *请填写支付宝公钥,一行字符串
 */
 const ALIPAY_RSA_PUBLIC_KEY = &#39;支付宝提供的公钥&#39;;
 /**
 * 支付宝服务器主动通知商户服务器里指定的页面
 * @var string
 */
 private $callback = "http://www.test.com/notify/alipay_notify.php";

 /**
 *生成APP支付订单信息
 * @param string $orderId 商品订单ID
 * @param string $subject 支付商品的标题
 * @param string $body 支付商品描述
 * @param float $pre_price 商品总支付金额
 * @param int $expire 支付交易时间
 * @return bool|string 返回支付宝签名后订单信息,否则返回false
 */
 public function unifiedorder($orderId, $subject,$body,$pre_price,$expire){
 try{
  $aop = new \AopClient();
  $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
  $aop->appId = self::APPID;
  $aop->rsaPrivateKey = self::RSA_PRIVATE_KEY;
  $aop->format = "json";
  $aop->charset = "UTF-8";
  $aop->signType = "RSA2";
  $aop->alipayrsaPublicKey = self::ALIPAY_RSA_PUBLIC_KEY;
  //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
  $request = new \AlipayTradeAppPayRequest();
  //SDK已经封装掉了公共参数,这里只需要传入业务参数
  $bizcontent = "{\"body\":\"{$body}\"," //支付商品描述
  . "\"subject\":\"{$subject}\"," //支付商品的标题
  . "\"out_trade_no\":\"{$orderId}\"," //商户网站唯一订单号
  . "\"timeout_express\":\"{$expire}m\"," //该笔订单允许的最晚付款时间,逾期将关闭交易
  . "\"total_amount\":\"{$pre_price}\"," //订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]
  . "\"product_code\":\"QUICK_MSECURITY_PAY\""
  . "}";
  $request->setNotifyUrl($this->callback);
  $request->setBizContent($bizcontent);
  //这里和普通的接口调用不同,使用的是sdkExecute
  $response = $aop->sdkExecute($request);
  //htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
  return htmlspecialchars($response);//就是orderString 可以直接给客户端请求,无需再做处理。
 }catch (\Exception $e){
  return false;
 }

 }
}

4.2. Traitement des rappels asynchrones après un paiement Alipay réussi

<?php
/**
 * alipay_notify.php.
 * User: lvfk
 * Date: 2017/10/26 0026
 * Time: 13:48
 * Desc: 支付宝支付成功异步通知
 */
include_once (__DIR__.&#39;/../alipay-sdk-PHP-20171023143822/AopSdk.php&#39;);

//验证签名
$aop = new \AopClient();
$aop->alipayrsaPublicKey = \Comm\Pay\Alipay::ALIPAY_RSA_PUBLIC_KEY;
$flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");

//验签
if($flag){
 //处理业务,并从$_POST中提取需要的参数内容
 if($_POST[&#39;trade_status&#39;] == &#39;TRADE_SUCCESS&#39;
 || $_POST[&#39;trade_status&#39;] == &#39;TRADE_FINISHED&#39;){//处理交易完成或者支付成功的通知
 //获取订单号
 $orderId = $_POST[&#39;out_trade_no&#39;];
 //交易号
 $trade_no = $_POST[&#39;trade_no&#39;];
 //订单支付时间
 $gmt_payment = $_POST[&#39;gmt_payment&#39;];
 //转换为时间戳
 $gtime = strtotime($gmt_payment);

 //此处编写回调处理逻辑

		//处理成功一定要返回 success 这7个字符组成的字符串,
		//die(&#39;success&#39;);//响应success表示业务处理成功,告知支付宝无需在异步通知
 
 }
}

5. Problèmes rencontrés

5.1. Continuez à signaler l'erreur 40001=> Pour en savoir la raison, j'ai régénéré plusieurs fois les clés publiques et privées RSA2 de l'application, mais j'ai constaté que cela n'avait aucun effet. Enfin, combiné aux informations en ligne, j'ai découvert que

s'est avéré être l'adresse de rappel Alipay notifyUrl, qui ne peut pas avoir de « ? » et ajouter des paramètres après ? 🎜>5.2. Notification asynchrone Alipay Cela a réussi, mais $_POST était vide

Il a également fallu un certain temps pour trouver cela. Lorsque j'ai commencé à le faire, j'ai suivi la suggestion d'Alipay d'utiliser la requête HTTS. Mais de cette façon, l’arrière-plan de l’application continue de signaler qu’il n’y a aucun contenu de paramètre. Enfin, je me suis souvenu que parce que notre application utilise l'authentification bidirectionnelle HTTS, les paramètres de rappel du serveur Alipay sont vides. Enfin, changez l'adresse de rappel en HTTP et vérifiez qu'elle passe Si vous rencontrez des problèmes, vérifiez d'abord la description du document d'Alipay et l'explication du code d'erreur fournie par Alipay. Si cela ne fonctionne pas, utilisez simplement Baidu ou Google. , et vous continuez Après les tests et la vérification, le problème sera définitivement résolu à la fin À ce stade, la fonction de paiement de l'application Alipay est terminée et les autres remboursements, relevés et autres fonctions de l'application ne sont pas terminés. Cependant, selon les documents du site officiel d'Alipay et le SDK fourni par Alipay, ce n'est qu'une question de temps avant qu'il ne soit intégré dans votre propre application.

Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois ! Recommandations associées :

Déclaration de prétraitement PDO Objet PDOStatement

Classe d'opération de recadrage d'image sans déformation PHP complète et Introduction à l'utilisation


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!

Déclaration:
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