加勒比HEZYO黑人专区-久久精品国产99国产精品亚洲-精品国产18久久久久久-久久人妻少妇嫩草AV

歡迎光臨 織晶網絡官網!

  • 新聞動態
  • 020-39182790
小程序資訊您現在的位置:首頁 > 新聞動態 > 小程序資訊

微信小程序支付通知處理的注意事項與方法

作者:織晶客服部   發布于:2023/7/1 9:32:24  點擊量:  來源:織晶網絡

在微信小程序支付的過程中,當我們完成支付后,但是怎么能拿到支付的交易號transaction_id呢?有些開發者往往在這一步被卡住,不知道如何正確處理,下面針對支付通知/支付回調的處理重點簡要說明一下。

備注:
1.本文是采用的服務端是thinkphp底層框架,使用V2支付密鑰;
2.強調支付通知地址必須能聯網的,不是本地的地址,url結尾不要攜帶參數,如 'https://www.gzhijing.cn/weapplet/notify/handle';
3.強調必須要連接遠程服務器中的數據庫,不是本地環境的數據庫

邏輯處理:
前提是 微信小程序中 點擊支付/吊起支付 后插入了一條支付數據到數據庫,但不知是否真正付款的狀態
當支付成功后,微信會不定時向服務端發送通知消息
1. 接收數據流
$weixinData = file_get_contents("php://input");
2.數據流放在遠程服務器一級目錄中的notify.txt文件中
file_put_contents('notify.txt', $weixinData, FILE_APPEND); //是xml格式
3.把接受的xml格式數據流轉成數據
$weixinArr = $this->xmlToArray($weixinData);
4.獲取數組中對應元素的值【這里就能拿到交易號等】
$transaction_id=$weixinArr['transaction_id'];
$total_fee = $weixinArr['total_fee'];
$out_trade_no = $weixinArr['out_trade_no'];
//如果成功返回了 $weixinArr['return_code'] == 'SUCCESS' && $weixinArr['result_code'] == 'SUCCESS'
5.則驗證簽名是否正確
 $weixinArr=$this->xmlToArray($weixinData);
$sign=$weixinArr['sign'];
unset($weixinArr['sign']);//去除原先的簽名
$newsign=$this->MakeSign($weixinArr,'07e1fedaae9706c90c0**********');//v2 數組中去除sign后重新進行簽名,得到newsign
if($sign==$newsign){
Db::query('UPDATE wx_order SET status=1 , transaction_id=' . $transaction_id);//修改支付狀態與添加交易號到數據庫
}else{
    echo '簽名不正確!';
}
6.驗證支付金額是否相同
//查詢吊起支付后添加的支付數據中的金額
$indata_total_fee = Db::table('gn_wx_order')->where('out_trade_no',$out_trade_no)->field('total_fee')->find();
//支付通知金額與數據庫中金額二者進行比較,如果相同,則執行
if($total_fee==$indata_total_fee['total_fee']*100){
    Db::query('UPDATE gn_wx_order SET confirm_pay=1 WHERE out_trade_no=' . $out_trade_no);//修改確認支付為1
//[然后阻止重復發送支付通知]

 echo exit('');

//注意這里:return_msg 目前成功返回的 SUCCESS ,不是OK

}else{
    echo '支付金額驗證不同,請技術人員盡快提供安全支持!';
}


代碼塊下載!




上一篇:如何制作一個微信小程序?

下一篇:微信小程序開發的注意事項