国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

淺談使用PHP開發微信支付的流程

2020-03-22 18:25:23
字體:
來源:轉載
供稿:網友
2.根據訂單信息和支付相關的賬號生成sign,并且生成支付參數3.將支付參數信息POST到微信服務器,獲取返回信息4.根據返回信息生成相應的支付代碼(微信內部)或是支付二維碼(非微信內),完成支付。下面分步驟的講一下:1.微信支付中相關的必須的訂單參數有三個,分別是:body(商品名或訂單描述),out_trade_no(一般為訂單號)和total_fee(訂單金額,單位“分”,要注意單位問題),在不同的應用中,首先要做的就是獲取訂單中的相關信息,為支付參數生成做準備。2.其他必須的支付參數有 appid(微信appid),mch_id(申請成功后告知),device_info(web端和微信端該參數都是統一的,為大寫的”WEB“),trade_type(根據使用場景不同,該值也是不同的,微信外部為”NATIVE“,微信內部為”JSAPI“),nonce_str(32位隨機字符串),spbill_create_ip(發起支付的終端IP,即服務器IP),notify_url(支付回調地址,微信服務器通知網站支付完成與否,修改訂單狀態),sign(簽名),還有一個需要說明的地方,如果trade_type為JSAPI的話,openid為必填的參數。簽名算法是比較容易出錯的地方,在于簽名步驟繁瑣,其實很關鍵的是,sign不參與簽名 A:將1、2中提到的除sign外的參數賦值,放到一個數組array里面,按照字典順序排序,其實就是鍵值按照A—Z的順序進行排序。B:將數組轉換成字符串string,格式為 k1=v1&k2=v2&...kN=vNC:在此string后加上KEY值(在微信支付商戶后臺用戶自己設定的)現在string = k1=v1&k2=v2&...kN=vN&key=KEY。D:string = md5(string)E: sign = strtoupper(string)至此,sign生成完畢。將sign添加到array數組里面生成新的數組。將該數組轉換為XML。至此,微信支付的參數準備工作完成。3.將2中生成的XML,使用POST的方式發送請求到微信(http://api.mch.weixin.qq.com/pay/unifiedorder),獲取返回的XML信息,將該信息轉換成數組格式方便操作。返回的XML信息如下: xml return_code ![CDATA[SUCCESS]] /return_code return_msg ![CDATA[OK]] /return_msg appid ![CDATA[wx2421b1c4370ec43b]] /appid mch_id ![CDATA[10000100]] /mch_id nonce_str ![CDATA[IITRi8Iabbblz1Jc]] /nonce_str sign ![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]] /sign result_code ![CDATA[SUCCESS]] /result_code prepay_id ![CDATA[wx201411101639507cbf6ffd8b0779950874]] /prepay_id trade_type ![CDATA[JSAPI]] /trade_type /xml
如果是trade_type==native支付的話,還會多一個參數code_url,該URL為微信掃碼支付的地址。4.下面就是支付的過程了。如果trade_type==native,那么使用一些方式將code_url轉換成二維碼,使用微信掃碼就可以了,如果是微信內部點擊支付的話,需要調用微信js-sdk中的相關東西,這一步中最關鍵是生成一個json格式的字符串。首先要生成轉換json字符串的數組array_jsapi。A:該數組的參數包括:appId,timeStamp,nonceStr,package,signType(默認為”MD5“),要注意大小寫和上面的數組里面是不一樣的。B:使用該數組生成paySign參數,簽名方式同上。C:將paySign參數追加到array_jsapi數組中。D:將該數組使用json_encode格式化為字符串js_string。完成上面的工作,就可以在微信內部進行支付了。下面為相關支付的示例代碼: script type='text/javascript' function jsApiCall() WeixinJSBridge.invoke( 'getBrandWCPayRequest', $js_string, function(res){ WeixinJSBridge.log(res.err_msg); if(res.err_msg=='get_brand_wcpay_request:ok') alert('支付成功'); else alert('支付失敗'); function callpay() if (typeof WeixinJSBridge == 'undefined'){ if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady', jsApiCall, false); }else if (document.attachEvent){ document.attachEvent('WeixinJSBridgeReady', jsApiCall); document.attachEvent('onWeixinJSBridgeReady', jsApiCall); }else{ jsApiCall(); /script
代碼中js_string即為我們生成的字符串。HTML代碼中調用callpay()函數發起支付。這樣微信支付的支付工作就完成了。下面是回調工作,該功能確保訂單支付成功后,有正確的狀態顯示給用戶。支付完成后,微信使用POST請求,將支付結果反饋給網站服務器,網站服務器獲取POST信息,根據支付成功與否,來確定是否修改訂單信息。A:將POST參數中的sign去除,并且記錄下來該值。B:對剩余的參數進行簽名C:將簽名結果和POST中的sign進行比對,相同說明簽名正確,根據支付結果修改訂單狀態。E:返回XML信息給微信,確保微信知道網站已經收到該通知,避免微信再次推送POST,示例如下: xml return_code ![CDATA[SUCCESS]] /return_code return_msg ![CDATA[OK]] /return_msg /xmlPHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 射洪县| 司法| 闽侯县| 钦州市| 洪雅县| 榕江县| 云梦县| 淮滨县| 阳泉市| 桐梓县| 神木县| 德格县| 平安县| 拜城县| 桑日县| 泸水县| 江油市| 岱山县| 武穴市| 车险| 都昌县| 三台县| 和政县| 龙南县| 蚌埠市| 德江县| 万源市| 安康市| 岑溪市| 旬阳县| 同仁县| 丽江市| 罗源县| 舟曲县| 黑龙江省| 奉新县| 正蓝旗| 鄂州市| 顺义区| 岢岚县| 新田县|