日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微信支付api的服务器上,服务器微信支付接口笔记(与app端对接)

發布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信支付api的服务器上,服务器微信支付接口笔记(与app端对接) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

到這里,準備工作就算完成了。

支付流程步驟詳解:

步驟1:用戶在商戶APP中選擇商品,提交訂單,選擇微信支付。

這一步,app將相關訂單信息提交給商戶

步驟2:商戶后臺收到用戶支付單,調用微信支付統一下單接口。參見【統一下單API】。

商戶系統先調用該接口在微信支付服務后臺生成預支付交易單,返回正確的預支付交易回話標識后再在APP里面調起支付。

步驟3:統一下單接口返回正常的prepay_id,再按簽名規范重新生成簽名后,將數據傳輸給APP。參與簽名的字段名為appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式為Sign=WXPay

步驟4:商戶APP調起微信支付。api參見本章節【app端開發步驟說明】(與服務器接口無關)

步驟5:商戶后臺接收支付通知。api參見【支付結果通知API】

步驟6:商戶后臺查詢支付結果。,api參見【查詢訂單API】

遇到的問題:

1 商戶用于接收微信的支付通知,鏈接是通過【統一下單API】中提交的參數notify_url設置,如果鏈接無法訪問,商戶將無法接收到微信通知,不能帶參數,微信返回類型為post,xml格式

2 接收到支付通知首先要做簽名驗證,防止數據泄漏導致出現“假通知”,造成資金損失,就是收到的參數,除了sign字段之外的字段做簽名之后,與收到的sign比較。

3 處理重復問題,微信可能會多次返回信息,要處理重復訂單的問題,主要是解決【統一下單API】的訂單號

4 另外,5里面要對6進行驗證,驗證無誤,才可以在商戶端對訂單支付狀態進行修改,防止假通知,或誤操作。

上代碼:(步驟5,6的)<>

/**

* 通用通知接口demo

* ====================================================

* 支付完成后,微信會把相關支付和用戶信息發送到商戶設定的通知URL,

* 商戶接收回調信息后,根據需要設定相應的處理流程。

*

* 這里舉例使用log文件形式記錄回調信息。

*/

require_once dirname(__FILE__).'/log_.php';

// include_once('./log_.php');

require_once '/xxxxxx.php';

// include_once('../xxxxxx.php');

//使用通用通知接口

$notify = new Notify_pub();

//存儲微信的回調

$xml = $GLOBALS['HTTP_RAW_POST_DATA'];

$notify->saveData($xml);//將微信的請求xml轉換成關聯數組,以方便數據處理

if (empty($data))

return false;

//驗證簽名,并回應微信。

//對后臺通知交互時,如果微信收到商戶的應答不是成功或超時,微信認為通知失敗,

//微信會通過一定的策略(如30分鐘共8次)定期重新發起通知,

//盡可能提高通知的成功率,但微信不保證通知最終能成功。

if($notify->checkSign() == FALSE){

//設置兩個數組的字段值

$notify->setReturnParameter('return_code','FAIL');//返回狀態碼

$notify->setReturnParameter('return_msg','簽名失敗');//返回信息

}else{

$notify->setReturnParameter('return_code','SUCCESS');//設置返回碼

}

$returnXml = $notify->returnXml();

echo $returnXml;

//==商戶根據實際情況設置相應的處理流程,此處僅作舉例=======

//以log文件形式記錄回調信息

$log_ = new Log_();

$log_name=dirname(__FILE__)'/notify_url.log';//log文件路徑

$log_->log_result($log_name,'【接收到的notify通知】:\n'.$xml.'\n');

if($notify->checkSign() == TRUE)

{

if ($notify->data['return_code'] == 'FAIL'||empty($notify->data['return_code'])) {

//此處應該更新一下訂單狀態,商戶自行增刪操作

$log_->log_result($log_name,'【通信出錯】:\n'.$xml.'\n');

}

elseif($notify->data['result_code'] == 'FAIL'||empty($notify->data['result_code'])){

//此處應該更新一下訂單狀態,商戶自行增刪操作

$log_->log_result($log_name,'【業務出錯】:\n'.$xml.'\n');

}

else{

$check = new OrderQuery_pub();

if(!$check->createXml()){

$msg = '訂單查詢失敗';

$log_->log_result($log_name,'訂單查詢失敗:\n'.time().'\n');

return false;

}

// if (empty($data['out_trade_no'])){

// // file_put_contents('/xxxxx/aaa.txt', '3');

// return false;

// }

ksort($data);

reset($data);

$payment = D('Payment')->getPayment('weixin');

/* 檢查支付的金額是否相符 */

//商戶邏輯

}

//簽名驗證

$sign = array();

foreach ($data as $key => $val) {

if ($key != 'sign') {

$sign[] = $key . '=' . $val;

}

}

$sign[] = 'key=' . $payment['appkey'];

//用&將sign元素拼接成字串

$signstr = strtoupper(md5(join('&', $sign)));

if ($signstr != $data['sign']){

$log_->log_result($log_name,'【簽名失敗】:\n''用于組件sign的數組為:='.$sign.'\n');

return false;

}

//商戶,對訂單操作

echo 'SUCCESS';

$log_->log_result($log_name,'【支付成功】:\n'.$xml.time().'\n');

die();

}

//商戶自行增加處理流程,

//例如:更新訂單狀態

//例如:數據庫操作

//例如:推送支付完成信息

}

?>

如果你覺得有用的話,頂一下吧 ! ^o^

總結

以上是生活随笔為你收集整理的微信支付api的服务器上,服务器微信支付接口笔记(与app端对接)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。