ホームページ  >  記事  >  バックエンド開発  >  Alipay APP 決済を PHP サーバーに統合する方法

Alipay APP 決済を PHP サーバーに統合する方法

不言
不言オリジナル
2018-07-03 16:57:331441ブラウズ

Alipay APP 決済を統合した PHP サーバーの例を紹介します。これは非常に参考になるので、皆さんのお役に立てれば幸いです。一緒に見てみましょう

Alipay 決済は多くのシナリオに分かれています。ここでは、Alipay APP 決済機能の統合についてのみ説明します。プロセス中に特に大きな落とし穴に遭遇したため、統合プロセスと概要を簡単に説明します。発生した問題と解決策

同社のビジネスはシンプルで、Alipay 決済のみをサポートしているため、返金、問い合わせ、その他の追加機能を気にする必要はありません。そのため、この記事ではサーバーがどのように準備するかについてのみ説明します。 Alipay 支払いインターフェイスを使用するときに支払い注文をプルするためのアプリです。一般的なプロセスは次のとおりです。

1. アプリケーションと構成を作成します。

まず、 Ant Financial 開発プラットフォーム (open.alipay.com) にアクセスして、アプリケーションを登録し、アプリケーション ID を取得し、アプリケーションを構成する必要があります。ここでの構成には主に、契約の署名、アプリケーションの RSA2 公開キーと秘密キーの生成、 Alipay が提供する支払い公開キーを取得します。公式 Web サイトのこの部分の背景にプロンプ​​トが表示されますが、これは比較的簡単です。

2. 対応する SDK をダウンロードします。

#ここでは、PHP バックグラウンドでサービスを統合しているため、PHP SDK をダウンロードしました。アドレス: https://docs.open.alipay.com/54/103419/

3. アクセス可能な実際のドメイン名を準備します

4. ケース

その後上記の 3 つのステップが完了したら、独自のビジネス コードを設定できるようになります。

4.1. APP 支払い時の支払い注文情報を整理します

<?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. Alipay 支払い成功後の非同期コールバック処理

<?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. 発生した問題

##5.1. エラー 40001=>isv.invalid-signature を報告し続ける

理由を調べるために、アプリケーションの RSA2 を再生成しました。公開キーと秘密キーを何度か試しましたが、効果がないことがわかりました。最後に、オンライン情報と組み合わせると、

が Alipay のコールバック アドレスであることが判明しました。 , Alipay の非同期通知 成功しましたが、$_POST が空でしたこれを見つけるのにも時間がかかり、やり始めたときは Alipay の提案に従い、HTTS を使用してリクエストしました。しかし、この方法では、アプリケーションのバックグラウンドでパラメーターの内容が存在しないことが通知され続けます。最後に、私たちのアプリケーションは HTTS 双方向認証を使用しているため、Alipay のサーバー コールバックのパラメーターが空であることを思い出しました。最後に、コールバック アドレスを HTTP メソッドに変更し、それが通過することを確認します。 Google、さらに続行してください。テストと検証の後、問題は最終的に必ず解決されます。

現時点で、Alipay APP の支払い機能は完了しており、その他の APP の払い戻し、明細書などの機能は完了しています。ただし、Alipay の公式 Web サイトのドキュメントと Alipay が提供する SDK によると、独自のアプリケーションに統合されるのは時間の問題です。

上記がこの記事の全内容です。皆様の学習に少しでもお役に立てれば幸いです。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

関連する推奨事項:

PDO 前処理ステートメント PDOStatement オブジェクト

PHP のフル機能の非変形画像トリミング操作クラスと使用方法の紹介


以上がAlipay APP 決済を PHP サーバーに統合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。