PHPでAlipayコールバックを記述する方法
まず、支払い時に書き込まれたコールバック アドレスが正しいことを確認してください!!!!!!
書かれたコールバック アドレスが自分を指しているかどうかを必ず確認してください。内部にコールバック検証を記述するものです。後で戻ってエラーを見つけないでください。難しすぎます。
Alipay によってカプセル化された署名検証クラス、rsaCheckV1 を見つけます (これも app2.0 インターフェイスにあります)
これは、Alipay がカプセル化したクラスです: (推奨学習: PHP ビデオ チュートリアル )
/** rsaCheckV1 & rsaCheckV2<br/>* 验证签名<br/>* 在使用本方法前,必须初始化AopClient且传入公钥参数。<br/>* 公钥是否是读取字符串还是读取文件,是根据初始化传入的值判断的。<br/>**/<br/>public function rsaCheckV1($params, $rsaPublicKeyFilePath,$signType='RSA') {<br/>$sign = $params['sign'];<br/>$params['sign_type'] = null;<br/>$params['sign'] = null;<br/>$this->alipayrsaPublicKey = $rsaPublicKeyFilePath;<br/><br/>return $this->verify($this->getSignContent($params), $sign, $rsaPublicKeyFilePath,$signType);<br/>}<br/>public function rsaCheckV2($params, $rsaPublicKeyFilePath, $signType='RSA') {<br/>$sign = $params['sign'];<br/>$params['sign'] = null;<br/>return $this->verify($this->getSignContent($params), $sign, $rsaPublicKeyFilePath, $signType);<br/>}<br/>function verify($data, $sign, $rsaPublicKeyFilePath, $signType = 'RSA') {<br/><br/>if($this->checkEmpty($this->alipayPublicKey)){<br/><br/>$pubKey= $this->alipayrsaPublicKey;<br/>$res = "-----BEGIN PUBLIC KEY-----\n" .<br/>wordwrap($pubKey, 64, "\n", true) .<br/>"\n-----END PUBLIC KEY-----";<br/>}else {<br/>//读取公钥文件<br/>$pubKey = file_get_contents($rsaPublicKeyFilePath);<br/>//转换为openssl格式密钥<br/>$res = openssl_get_publickey($pubKey);<br/>}<br/><br/>($res) or die('支付宝RSA公钥错误。请检查公钥文件格式是否正确'); <br/><br/>//调用openssl内置方法验签,返回bool值<br/>if ("RSA2" == $signType) {<br/>$result = (bool)openssl_verify($data, base64_decode($sign), $res, OPENSSL_ALGO_SHA256);<br/>} else {<br/>$result = (bool)openssl_verify($data, base64_decode($sign), $res);<br/>}<br/><br/>if(!$this->checkEmpty($this->alipayPublicKey)) {<br/>//释放资源<br/>openssl_free_key($res);<br/>}<br/><br/>return $result;<br/>}L<br/>SQLite<br/>SQLite3<br/>SQLSRV <br/>Sybase<br/>tokyo_tyrant<br/>
また、これら 2 つを使用する 2 つのメソッドは混同されています。前者は、signtype を渡す必要がありますが、後者は渡しません (最初の 2 つのメソッドは 3 番目のメソッドを呼び出します)。もう 1 つの重要な点は、このメソッド自体がファイルから公開キーを抽出することです。この署名検証メソッドは、(bool) true または (bool) false を返し、署名検証が成功したかどうかを判断します。
# ここで 3 つの点に注意する必要があります:1—注意公钥的正确性,还有用的是支付宝公钥不是你当初生成的公钥<br/>2—区别这里的方法和支付宝接口本身方法的公钥获取方式<br/>3—注意接口方法本身的注释,很重要<br/>
Alipay のコールバック パラメータは投稿の形式で返されますが、テスト時にはアドレス バーにコールバック URL を直接書き込むことができます。次に、get メソッドを使用してそれを受け入れるため、パラメータを入力する必要はありません。結果は同じです (コールバック URL はログ ファイルに記録できます) 。署名を検証するときは、すべてのパラメータが返されます。署名は自動的に検証でき、ここでは必要なパラメーターを受け入れることができます。ここでは詳細には触れませんが、パラメーターを通常どおり受け入れるだけです。以下は、パラメータを確認するときに注文金額と販売者番号を確認するために使用するコードです。参考のためにのみ使用します (tp5 を使用します):
public function check($receipt_amount,$buyer_pay_amount,$order_price,$app_id,$seller_email){<br/> if($receipt_amount !== $order_price || $buyer_pay_amount !== $order_price){<br/>// echo 1;<br/> return $this->log('订单支付金额有误!');<br/> }<br/> //支付宝支付的所有参数<br/> $alipay_config = Config::get('alipay_config');<br/> if($app_id !== $alipay_config['appid']){<br/>// echo 2;<br/> return $this->log('商家编号有误!');<br/> }<br/> <br/> //验证收款商家是否正确<br/> if($seller_email !== $alipay_config['seller_id']){<br/>// echo 3;<br/> return $this->log('收款商家有误!');<br/> }<br/> return 'success';<br/> }<br/>
注文を確認する
こちら主なことは在庫を確認することです。ここではトランザクション処理を使用するのが最善です (ただし、注文量が必ずしもこの時点に戻るとは限りません)。私のコードは参考のためにのみ以下に示します (tp5):public function index($order_sn='')<br/> {<br/> if(isset($_POST['order_sn']) && empty($order_sn)){<br/> $order_sn = $_POST['order_sn'];<br/> }<br/> <br/> $table = self::order_info($order_sn);<br/> if($table == 'failure'){return 'false';}<br/> $oid = $table['order_id'];<br/> //通过订单id $oid 查询出订单中物品的id<br/> $goodsTable = Db::name('goods');<br/> $allgoods = Db::name("test1")->where('o_id', $oid)->field('g_id,g_num')->select();<br/> foreach ($allgoods as $k => $v) {<br/> //事务处理<br/> $goodsTable->startTrans();//事物开始<br/> try {<br/> //判断库存数量<br/> $goodsTable->query('update test2 set g_num = g_num-' . $v['g_num'] . ' where g_num >= ' . $v['g_num'] . ' and gid =' . $v['g_id']);<br/> <br/> } catch (\Exception $e) {<br/> $goodsTable->rollBack();//事物回滚<br/> }<br/> <br/> $goodsTable->commit();// 事物提交<br/> }<br/> <br/> //修改订单<br/> $res = Db::name('test3')->where('order_sn',$order_sn)->update(['order_state' => '1','pay_time'=>time()]);<br/> if($res != 0){<br/> return 'success';<br/> }<br/> }<br/>
以上がPHPでAlipayコールバックを記述する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます
