Alipay APP 決済を統合した PHP サーバーの例を紹介します。これは非常に参考になるので、皆さんのお役に立てれば幸いです。
Alipay の支払いは多くのシナリオに分かれています。ここでは、Alipay APP の支払い機能の統合についてのみ説明します。その過程で特に大きな落とし穴に遭遇したため、統合プロセスと遭遇した問題の概要を説明します。ソリューション
同社のビジネスはシンプルで、Alipay 支払いのみをサポートしているため、返金、問い合わせ、その他の追加機能について心配する必要はありません。そのため、この記事では、サーバーが APP で支払い注文を取得する方法についてのみ説明します。 Alipay 支払いインターフェースを使用する際の情報と一般的なプロセスは次のとおりです。
1. アプリケーションと構成を作成します
最初に、登録する必要があります。 Ant Financial 開発プラットフォーム (open.alipay.com) 上のアプリケーションを取得し、アプリケーション ID を取得して、アプリケーションを構成します。ここでの構成には主に、契約の署名、アプリケーションの RSA2 公開キーと秘密キーの生成、およびAlipay によって提供される支払い公開キー。公式 Web サイトのこの部分のバックエンドにプロンプトがあります。これは比較的簡単です
2 対応する SDK をダウンロードします。 ##ここでは PHP バックグラウンドでサービスを統合しているため、https://docs.open/54/103419/
# から PHP SDK をダウンロードしました。 ##3. アクセス可能な実際のドメイン名を準備します
4. 上記の 3 つの手順が完了したら独自のビジネス コード
4.1. APP 支払いを整理する際の支払い注文情報 <?php
require_once (__DIR__.'/alipay-sdk-PHP-20171023143822/AopSdk.php');
class Alipay
{
/**
* 应用ID
*/
const APPID = '你的应用ID';
/**
*请填写开发者私钥去头去尾去回车,一行字符串
*/
const RSA_PRIVATE_KEY = '应用对应开发者私钥';
/**
*请填写支付宝公钥,一行字符串
*/
const ALIPAY_RSA_PUBLIC_KEY = '支付宝提供的公钥';
/**
* 支付宝服务器主动通知商户服务器里指定的页面
* @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;
}
}
}
<?php /** * alipay_notify.php. * User: lvfk * Date: 2017/10/26 0026 * Time: 13:48 * Desc: 支付宝支付成功异步通知 */ include_once (__DIR__.'/../alipay-sdk-PHP-20171023143822/AopSdk.php'); //验证签名 $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. 問題が発生しました
5.1. エラー 40001=>isv.invalid-signature
理由を調べるために、アプリケーションの RSA2 公開キーと秘密キーを数回再生成しましたが、効果がないことがわかりました。最後に、オンライン情報と組み合わせると、 が Alipay コールバック アドレスであることがわかりました。notifyUrl には「?」を含めることができず、?
#5.2 , Alipay の非同期通知 成功しましたが、$_POST が空でした
これを見つけるのにも時間がかかりました。私がやり始めたとき、Alipay の提案に従い、HTTS を使用してリクエストしました。しかし、この方法では、アプリケーションのバックグラウンドでパラメーターの内容が存在しないことが通知され続けます。最後に、私たちのアプリケーションは HTTS 双方向認証を使用しているため、Alipay のサーバー コールバックのパラメーターが空であることを思い出しました。最後に、コールバック アドレスを HTTP に変更し、それが通過することを確認します。 問題が発生した場合は、まず Alipay のドキュメントの説明と、Alipay が提供するエラー コードの説明を確認してください。うまくいかない場合は、Baidu または Google を使用してください。さらに、テストと検証を経て、問題は最終的に必ず解決されます。
現時点では、Alipay APP の支払い機能は完了しており、その他の APP 返金、明細書などの機能はまだ行われていません。ただし、Alipay の公式 Web サイトのドキュメントと Alipay が提供する SDK によると、それが独自のアプリケーションに統合されるのは時間の問題です。以上がこの記事の全内容です。読んでいただきありがとうございます。詳細については PHP 中国語 Web サイトをご覧ください。
関連する推奨事項:
thinkPHP トランザクション詳細クエリ関数
以上がPHPサーバーはAlipay APP決済を統合しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。