Heim  >  Artikel  >  Backend-Entwicklung  >  Implementieren Sie die APP-Zahlungsfunktion auf der Serverseite

Implementieren Sie die APP-Zahlungsfunktion auf der Serverseite

php中世界最好的语言
php中世界最好的语言Original
2018-03-24 13:48:062108Durchsuche

Dieses Mal werde ich Ihnen die Vorsichtsmaßnahmen für die Implementierung der APP-Zahlungsfunktion auf der Serverseite vorstellen. Das Folgende ist ein praktischer Fall, schauen wir uns das an.

Die Alipay-Zahlung ist in viele Szenarien unterteilt. Hier beschreibe ich nur die Integration der Alipay-APP-Zahlungsfunktion. Während des Prozesses bin ich auf eine besonders große Falle gestoßen, daher werde ich den Integrationsprozess kurz beschreiben und die Probleme skizzieren Angetroffene Lösungen

Da das Geschäft des Unternehmens einfach ist und nur Alipay-Zahlungen unterstützt, müssen Sie sich nicht um zusätzliche Funktionen wie Rückerstattungen, Anfragen usw. kümmern. Daher wird in diesem Artikel nur beschrieben, wie der Server die APP darauf vorbereitet Abrufen von Zahlungsauftragsinformationen bei Verwendung der Alipay-Zahlungsschnittstelle und des allgemeinen Prozesses wie folgt

1. Erstellen Sie eine Anwendung und Konfiguration

Zuerst Sie Sie müssen die Anwendung auf der Ant Financial-Entwicklungsplattform (open.alipay.com) registrieren, die Anwendungs-ID abrufen und die Anwendung konfigurieren. Die Konfiguration umfasst hier hauptsächlich die Unterzeichnung eines Vertrags und die Generierung der öffentlichen und privaten RSA2-Schlüssel der Anwendung. und Erhalten des von Alipay bereitgestellten öffentlichen Zahlungsschlüssels. Im Hintergrund dieses Teils der offiziellen Website ist es relativ einfach

2. Laden Sie das entsprechende SDK herunter

Hier integriere ich Dienste im PHP-Hintergrund, also habe ich das PHP SDK heruntergeladen, Adresse: https://docs.open.alipay.com/54/103419/

3. Bereiten Sie einen zugänglichen echten Domainnamen vor

Fall

Nachdem die oben genannten drei Schritte abgeschlossen sind, können wir nun unseren eigenen Geschäftscode konfigurieren

4.1. Organisations-APP-Zahlungsauftragsinformationen während der Zahlung

<?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. Asynchrone Rückrufverarbeitung nach erfolgreicher Alipay-Zahlung

<?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['trade_status'] == 'TRADE_SUCCESS'
 || $_POST['trade_status'] == 'TRADE_FINISHED'){//处理交易完成或者支付成功的通知
 //获取订单号
 $orderId = $_POST['out_trade_no'];
 //交易号
 $trade_no = $_POST['trade_no'];
 //订单支付时间
 $gmt_payment = $_POST['gmt_payment'];
 //转换为时间戳
 $gtime = strtotime($gmt_payment);
 //此处编写回调处理逻辑
		//处理成功一定要返回 success 这7个字符组成的字符串,
		//die('success');//响应success表示业务处理成功,告知支付宝无需在异步通知
 
 }
}

5.1 40001=>isv.invalid-signature meldet weiterhin. Beim Generieren der öffentlichen und privaten RSA2-Schlüssel der Anwendung wurde keine Auswirkung festgestellt. In Kombination mit Online-Informationen stellte sich heraus, dass es sich bei um die Alipay-Rückrufadresse notifyUrl handelte, die kein „?“ enthalten und keine Parameter nach ? hinzufügen darf 🎜>5.2. Asynchrone Benachrichtigung von Alipay Es war erfolgreich, aber $_POST war leer

Als ich damit anfing, folgte ich dem Vorschlag von Alipay, eine HTTS-Anfrage zu verwenden. Auf diese Weise meldet der Anwendungshintergrund jedoch immer wieder, dass kein Parameterinhalt vorhanden ist. Schließlich fiel mir ein, dass die Parameter des Alipay-Serverrückrufs leer sind, da unsere Anwendung die bidirektionale HTTP-Authentifizierung verwendet. Ändern Sie abschließend die Rückrufadresse in HTTP und überprüfen Sie, ob sie erfolgreich ist. Wenn Sie auf Probleme stoßen, überprüfen Sie zunächst die Dokumentbeschreibung von Alipay und die von Alipay bereitgestellte Fehlercodeerklärung. Wenn es nicht funktioniert, verwenden Sie einfach Baidu oder Google , und Sie fahren fort: Nach dem Testen und Überprüfen wird das Problem am Ende definitiv gelöst

Zu diesem Zeitpunkt ist die Zahlungsfunktion der Alipay-App abgeschlossen, andere Rückerstattungs-, Kontoauszugs- und andere Funktionen der APP jedoch nicht Laut den offiziellen Alipay-Website-Dokumenten und dem von Alipay bereitgestellten SDK ist es jedoch nur eine Frage der Zeit, bis es in Ihre eigene Anwendung integriert wird. Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website. Empfohlene Lektüre:

Detaillierte Erläuterung der Verwendung von PHP-Rückruffunktionen und anonymen Funktionen

Zugriff auf Verzeichnisdienstberechtigungen von phpstudy2018

ThinkPHP-Implementierung des WeChat-Zahlungsprozesses (jsapi payment) Tutorial, detaillierte Erklärung_php-Beispiel

Das obige ist der detaillierte Inhalt vonImplementieren Sie die APP-Zahlungsfunktion auf der Serverseite. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn