欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

nodejs微信公眾號(hào)支付開(kāi)發(fā)的示例分析-創(chuàng)新互聯(lián)

這篇文章主要介紹了nodejs微信公眾號(hào)支付開(kāi)發(fā)的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

網(wǎng)頁(yè)設(shè)計(jì)是網(wǎng)站建設(shè)的前奏,好的網(wǎng)頁(yè)設(shè)計(jì)更深度的剖析產(chǎn)品和設(shè)計(jì)風(fēng)格定位,結(jié)合最新的網(wǎng)頁(yè)設(shè)計(jì)流行趨勢(shì),與WVI應(yīng)用標(biāo)準(zhǔn),設(shè)計(jì)出具企業(yè)表現(xiàn)力,大器而深穩(wěn)的網(wǎng)站界面設(shè)。成都創(chuàng)新互聯(lián)公司成立于2013年,是成都網(wǎng)站建設(shè)公司:提供企業(yè)網(wǎng)站設(shè)計(jì),高端網(wǎng)站設(shè)計(jì),營(yíng)銷型企業(yè)網(wǎng)站建設(shè)方案,成都響應(yīng)式網(wǎng)站建設(shè),重慶小程序開(kāi)發(fā),專業(yè)建站公司做網(wǎng)站。

odeJs 微信公眾號(hào)功能開(kāi)發(fā),移動(dòng)端 H5頁(yè)面調(diào)用微信的支付功能。這幾天根據(jù)公司的需要使用 node 和 h6頁(yè)面調(diào)用微信的支付功能完成支付需求?,F(xiàn)在把開(kāi)發(fā)過(guò)程重新捋一遍,以幫助更多的開(kāi)發(fā)者順利的完成微信支付功能的開(kāi)發(fā)。(微信暫時(shí)還沒(méi)有提供 node 的支付功能)

一.請(qǐng)求CODE

請(qǐng)求 code 的目的就是獲取用戶的 openid(用戶相對(duì)于當(dāng)前公眾號(hào)的標(biāo)識(shí)) 和access_token,請(qǐng)求的API:https://open.weixin.qq.com/connect/oauth3/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
此 api 需要注意幾個(gè)參數(shù):

1.  appid公眾號(hào)的 appid,可以在公眾號(hào)中看到
2.  redirect_uri 自定義的微信回調(diào)地址, 微信會(huì)在你請(qǐng)求完上面的地址后跳轉(zhuǎn)到你定義的redirect_uri的地址, 帶著 code,此處的 redirect_url 需要 **url_encode** *php*, 如果你的程序是 node 則需要使用 **encodeURLComponent(url)**編碼
3.  response_type=code,這個(gè)沒(méi)什么好說(shuō)的就是固定的 response_type=code,詳細(xì)說(shuō)明可以查看微信官網(wǎng)的說(shuō)明
4.  scope=snsapi_userinfo,固定這樣寫(xiě)就好,詳細(xì)說(shuō)明可以查看微信官網(wǎng)的說(shuō)明
5.  state=STATE 固定這樣寫(xiě)就好,詳細(xì)說(shuō)明可以查看微信官網(wǎng)的說(shuō)明
6.  wechat_redirect 固定這樣寫(xiě)就好,詳細(xì)說(shuō)明可以查看微信官網(wǎng)的說(shuō)明
ps:官網(wǎng)鏈接:

二.通過(guò)code獲取access_token,openid

第一步已經(jīng)獲取到了 code 的值了, 那么接下來(lái)就需要通過(guò) code 來(lái)獲取 access_token,openid的值了,請(qǐng)求的 api
API /tupian/20230522/access_token
此處api 的參數(shù)說(shuō)明:

1.  appid 微信公眾號(hào) id,微信公眾號(hào)后臺(tái)獲取
2.  secret 微信公眾號(hào)的密鑰, 微信公眾號(hào)后臺(tái)獲取
3.  code, 第一步獲取用到的 code
4.  grant_type=authorization_code 固定就好


三.通過(guò)access_token調(diào)用接口

access_token 可以做后續(xù)的功能, 可以參考官方的例子:
/tupian/20230522/showdocument 只要網(wǎng)頁(yè)端調(diào)用微信支付功能就完事兒了?no,還差點(diǎn)
在微信瀏覽器里面打開(kāi)H5網(wǎng)頁(yè)中執(zhí)行JS調(diào)起支付。接口輸入輸出數(shù)據(jù)格式為JSON。
注意:WeixinJSBridge內(nèi)置對(duì)象在其他瀏覽器中無(wú)效。
示例代碼如下:

function onBridgeReady(){
 WeixinJSBridge.invoke(
 'getBrandWCPayRequest', {
  "appId" : "wx2421b1c4370ec43b", //公眾號(hào)名稱,由商戶傳入 
  "timeStamp":" 1395712654",  //時(shí)間戳,自1970年以來(lái)的秒數(shù) 
  "nonceStr" : "e61463f8efa94090b1f366cccfbbb444", //隨機(jī)串 
  "package" : "prepay_id=u802345jgfjsdfgsdg888", 
  "signType" : "MD5",  //微信簽名方式: 
  "paySign" : "70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信簽名 
 },
 function(res){ 
  if(res.err_msg == "get_brand_wcpay_request:ok" ) {} // 使用以上方式判斷前端返回,微信團(tuán)隊(duì)鄭重提示:res.err_msg將在用戶支付成功后返回 ok,但并不保證它絕對(duì)可靠。 
 }
 ); 
}
if (typeof WeixinJSBridge == "undefined"){
 if( document.addEventListener ){
 document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
 }else if (document.attachEvent){
 document.attachEvent('WeixinJSBridgeReady', onBridgeReady); 
 document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
 }
}else{
 onBridgeReady();
}

看到上面的代碼, 那么想調(diào)用微信的支付功能需要傳遞參數(shù),

{
 "appId" : "wx2421b1c4370ec43b", //公眾號(hào)名稱,由商戶傳入 
 "timeStamp":" 1395712654",  //時(shí)間戳,自1970年以來(lái)的秒數(shù) 
 "nonceStr" : "e61463f8efa94090b1f366cccfbbb444", //隨機(jī)串 
 "package" : "prepay_id=u802345jgfjsdfgsdg888", 
 "signType" : "MD5",  //微信簽名方式: 
 "paySign" : "70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信簽名 
}

參數(shù)說(shuō)明:

1. appId //公眾號(hào)名稱,由商戶傳入
2. timeStamp //時(shí)間戳,自1970年以來(lái)的秒數(shù)  此處需要特別的注意一下,需要是字符串的時(shí)間戳格式, 意思就是必須就“” 引號(hào)
3. nonceStr //隨機(jī)串    32位的, 隨后會(huì)提供方法
4. signType // 微信簽名方式: MD5
5. paySign //微信簽名, 隨后說(shuō)
6. **package**   //這個(gè)最重要, 充哪里獲取到的呢? 接下來(lái)說(shuō)。
ps: 官網(wǎng)接口說(shuō)明
/tupian/20230522/jsapi.php 從微信的 統(tǒng)一下單 接口獲取prepay_id

官方 api:
/tupian/20230522/pp請(qǐng)求參數(shù)一堆, 但是有一些不是必須的,下面是必須參數(shù)

{
 appid : APPID,
 attach : ATTACH,
 body : BODY,
 mch_id : MCH_ID,
 nonce_str: NONCE_STR,
 notify_url : NOTIFY_URL,// 微信付款后的回調(diào)地址
 openid : OPENID,
 out_trade_no : OUT_TRADE_NO ,//new Date().getTime(), //訂單號(hào)
 spbill_create_ip : SPBILL_CREATE_IP , //客戶端的 ip
 total_fee : TOTAL_FEE, //商品的價(jià)格, 此處需要注意的是這個(gè)價(jià)格是以分算的, 那么一般是元, 你需要轉(zhuǎn)換為 RMB 的元
 trade_type : 'JSAPI',
}

微信的統(tǒng)一下單接口要求傳遞的是 xml 的數(shù)據(jù), 而且數(shù)據(jù)還需要簽名, 那么首先吧數(shù)據(jù)簽名。
簽名規(guī)則可以參考微信給出的簽名規(guī)則(簽名方法一會(huì)給出)
微信官方簽名規(guī)則:
/tupian/20230522/404.html 的格式:

var body = '<xml> ' +
 '<appid>'+config.wxappid+'</appid> ' +
 '<attach>'+obj.attach+'</attach> ' +
 '<body>'+obj.body+'</body> ' +
 '<mch_id>'+config.mch_id+'</mch_id> ' +
 '<nonce_str>'+obj.nonce_str+'</nonce_str> ' +
 '<notify_url>'+obj.notify_url+'</notify_url>' +
 '<openid>'+obj.openid+'</openid> ' +
 '<out_trade_no>'+obj.out_trade_no+'</out_trade_no>'+
 '<spbill_create_ip>'+obj.spbill_create_ip+'</spbill_create_ip> ' +
 '<total_fee>'+obj.total_fee+'</total_fee> ' +
 '<trade_type>'+obj.trade_type+'</trade_type> ' +
 '<sign>'+obj.sign+'</sign> ' + // 此處必帶簽名, 否者微信在驗(yàn)證數(shù)據(jù)的時(shí)候是不通過(guò)的
 '</xml>';

接下來(lái)就是請(qǐng)求 api 獲取prepay_id的值了, 將上面得到的 xml 數(shù)據(jù)請(qǐng)求下面的 api 發(fā)送給微信, 微信驗(yàn)證數(shù)據(jù)沒(méi)問(wèn)題后會(huì)放回你想要的值。
api : /tupian/20230522/pp六 獲取到了prepay_id是不是就可以在 h6 段直接調(diào)用微信的支付了么? 答案是還不可以。

獲取到了prepay_id那么現(xiàn)在h6 呼起微信的支付功能的參數(shù)是這樣的:

{
 "appId" : "wx2421b1c4370ec43b", //公眾號(hào)名稱,由商戶傳入 
 "timeStamp":" 1395712654",  //時(shí)間戳,自1970年以來(lái)的秒數(shù) 
 "nonceStr" : "e61463f8efa94090b1f366cccfbbb444", //隨機(jī)串 
 "package" : "prepay_id=u802345jgfjsdfgsdg888", 
 "signType" : "MD5",  //微信簽名方式:
}

有了這樣的參數(shù), 那么你還需要吧所有參與的參數(shù)做簽名。簽名規(guī)跟上面的一樣,生成了簽名后需要吧簽名的參數(shù) paySign 賦給h6 呼起微信的支付功能的參數(shù)(也就是微信的簽名不參與簽名的生成)
最后的參數(shù)是這樣子的:

{
 "appId" : "wx2421b1c4370ec43b", //公眾號(hào)名稱,由商戶傳入 
 "timeStamp":" 1395712654",  //時(shí)間戳,自1970年以來(lái)的秒數(shù) 
 "nonceStr" : "e61463f8efa94090b1f366cccfbbb444", //隨機(jī)串 
 "package" : "prepay_id=u802345jgfjsdfgsdg888", 
 "signType" : "MD5",  //微信簽名方式:
 "paySign" : "70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信簽名
}

如果你的各個(gè)環(huán)節(jié)都沒(méi)有問(wèn)題, 那么得到了這樣參數(shù)后你就可以正常的調(diào)用起微信的支付功能, 跟原生的功能是沒(méi)有任何的差別的,(估計(jì)你現(xiàn)在的心里也特高興吧, 沒(méi)有 app 竟然可以使用 app 的功能,就是這么的神奇)。

七.支付完成的回調(diào)

微信支付完了后會(huì)在 h6 頁(yè)面的微信支付的回調(diào)函數(shù)里面放回值,
res.err_msg == "get_brand_wcpay_request:ok" ,這樣就是成功了, 但是不是就完事兒了呢 ? 也不是,為什么呢? 微信真的收到錢(qián)了么? 收到的錢(qián)是不是你傳遞給微信的值呢 ?你還需要將支付的結(jié)果寫(xiě)數(shù)據(jù)庫(kù)什么的,這些都是未知。還記的在統(tǒng)一下單接口中有個(gè)必須參數(shù)就是 notify_url : NOTIFY_URL,// 微信付款后的回調(diào)地址 這個(gè)地址是用戶傳遞給微信的, 微信在收到用戶的付款后會(huì)以 post 的方式請(qǐng)求這個(gè)接口,微信會(huì)傳遞用戶付款的信息過(guò)來(lái), 不過(guò)是 xml 格式的。
類系這樣的 xml 格式:

<xml>
 <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
 <attach><![CDATA[支付測(cè)試]]></attach>
 <bank_type><![CDATA[CFT]]></bank_type>
 <fee_type><![CDATA[CNY]]></fee_type>
 <is_subscribe><![CDATA[Y]]></is_subscribe>
 <mch_id><![CDATA[10000100]]></mch_id>
 <nonce_str><![CDATA[5d2b6c2a8db53831f7eda20af46e531c]]></nonce_str>
 <openid><![CDATA[oUpF8uMEb4qRXf22hE3X68TekukE]]></openid>
 <out_trade_no><![CDATA[1409811653]]></out_trade_no>
 <result_code><![CDATA[SUCCESS]]></result_code>
 <return_code><![CDATA[SUCCESS]]></return_code>
 <sign><![CDATA[B552ED6B279343CB493C5DD0D78AB241]]></sign>
 <sub_mch_id><![CDATA[10000100]]></sub_mch_id>
 <time_end><![CDATA[20140903131540]]></time_end>
 <total_fee>1</total_fee>
 <trade_type><![CDATA[JSAPI]]></trade_type>
 <transaction_id><![CDATA[1004400740201409030005092168]]></transaction_id>
</xml>

根據(jù)自己的業(yè)務(wù)邏輯解析這個(gè) xml 格式的數(shù)據(jù)就好了。
注意:這里你在獲取到數(shù)據(jù)后微信需要得到你的回應(yīng), 如果你一直不回應(yīng)微信, 微信會(huì)請(qǐng)求你好幾次, 這樣估計(jì)你的邏輯會(huì)有問(wèn)題吧,所以你需要給微信返回 xml 的格式的 回應(yīng)。

<xml>
 <return_code><![CDATA[SUCCESS]]></return_code>
 <return_msg><![CDATA[OK]]></return_msg>
</xml>

小坑:node ,express 框架開(kāi)發(fā), 如果你在微信的支付成功后的回調(diào)中沒(méi)有獲取到任何 xml 的值, 那么你需要安裝一組件:body-parser-xml, 你可以使用 npm install body-parser-xml --save 安裝, 在 app.js 里面require('body-parser-xml')(bodyParser);,使用中間件的方式

// 解決微信支付通知回調(diào)數(shù)據(jù)
app.use(bodyParser.xml({
 limit: '2MB', // Reject payload bigger than 1 MB
 xmlParseOptions: {
 normalize: true, // Trim whitespace inside text nodes
 normalizeTags: true, // Transform tags to lowercase
 explicitArray: false // Only put nodes in array if >1
 }
}));

這樣你就可以正常的獲取到微信的 xml 數(shù)據(jù)了。

使用方法:

pay.getAccessToken({
 notify_url : 'http://demo.com/', //微信支付完成后的回調(diào)
 out_trade_no : new Date().getTime(), //訂單號(hào)
 attach : '名稱',
 body : '購(gòu)買(mǎi)信息',
 total_fee : '1', // 此處的額度為分
 spbill_create_ip : req.connection.remoteAddress,
 }, function (error, responseData) {
 res.render('payment', {
  title : '微信支付',
  wxPayParams : JSON.stringify(responseData),
  //userInfo : userInfo
 });
 });

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“nodejs微信公眾號(hào)支付開(kāi)發(fā)的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

網(wǎng)頁(yè)名稱:nodejs微信公眾號(hào)支付開(kāi)發(fā)的示例分析-創(chuàng)新互聯(lián)
新聞來(lái)源:http://chinadenli.net/article34/dgppse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、網(wǎng)站收錄外貿(mào)網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站改版網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)