Nodejs微信小程序后臺開發(fā)總結(jié)

? ? ? 先說點題外話,從學(xué)習(xí)nodejs到基本獨立完成微信小程序后臺開發(fā),我只用了2個星期,基本是邊學(xué)邊開發(fā),第一個星期學(xué)習(xí)nodejs,第二個星期開發(fā),然后抽幾天和前端小伙伴聯(lián)調(diào)。寫了兩年的android開發(fā),也一直想多學(xué)點其他計算機(jī)語言,嘗試其他業(yè)務(wù)開發(fā),提高下自己的能力(逼格),現(xiàn)終于有機(jī)會可以學(xué)習(xí),這里,還是的感謝我老大。

? ? ? 對于微信小程序的開發(fā),后臺其實就主要兩點需要對接到微信服務(wù)器:1.支付接口相關(guān),2.客服接口相關(guān)。

一.支付接口相關(guān)

微信小程序支付的交互圖

1.https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1

a.用戶通過小程序向商戶服務(wù)器發(fā)起支付請求,商戶服務(wù)器通過微信接口(POST https://api.mch.weixin.qq.com/pay/unifiedorder)請求獲取到prepay_id,并將支付參數(shù)(sign,nonce_str等)一并返回給小程序

b.小程序收到支付參數(shù)后,調(diào)起微信支付面板進(jìn)行支付

c.支付成功后,微信服務(wù)器會將消息推送到回調(diào)接口,推送所帶參數(shù)包含支付訂單號,服務(wù)器可以根據(jù)該訂單號判斷支付狀態(tài)

2.服務(wù)器下單接口中,有幾個參數(shù)需要特別注意:

a .隨機(jī)數(shù)字符串 nonce_str:不長于32位,可以是 時間戳+隨機(jī)序列 的拼接

b .簽名 sign:簽名時所帶參數(shù)一定是必帶的,沒必要的就不帶,要按照ASCII順序排,如果簽名錯誤,先檢查順序,然后檢查接口請求參數(shù)與簽名的參數(shù)是否一致

c.商戶訂單號 out_trade_no:商戶支付的訂單號由商戶自定義生成,微信支付要求商戶訂單號保持唯一性(建議根據(jù)當(dāng)前系統(tǒng)時間加隨機(jī)序列來生成訂單號)。重新發(fā)起一筆支付要使用原訂單號,避免重復(fù)支付;已支付過或已調(diào)用關(guān)單、撤銷(請見后文的API列表)的訂單號不能重新發(fā)起支付。

d .notify_url:接收微信支付異步通知回調(diào)地址,必須為直接可訪問的url,不能攜帶參數(shù)。微信請求的參數(shù)里面包含了訂單號等重要信息,如果是json格式,則需要其又通過 xml字段 包裹了一層。

nodejs偽代碼示例:

async function getOpenId(jsCode) {

? ? ? var url = 'https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${secret}&js_code=${jsCode}&grant_type=authorization_code';

? ? ? return new Promise((resolve, reject) => {

? ? ? ? ? ? request(url, {timeout 5000:}, function (error, respinse, body) {

? ? ? ? ? ? ? ? ? if (error) {

? ? ? ? ? ? ? ? ? ? ? ? ?reject(error);

? ? ? ? ? ? ? ? ? ?} else {

? ? ? ? ? ? ? ? ? ? ? ? resolve(body);

? ? ? ? ? ? ? ? ? ?}

? ? ? ? ? ? })

? ? ? }).catch(function (error) {

? ? ? ? ? ? ?conlose.log(error);

? ? ? });

}

'POST payment': async (ctx, next) => {

? ? ? var jsCode = ctx.request.body.js_code;

? ? ? var openid = await getOpenid(jsCode).openid;

? ? ? var url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';

? ? ? var params = {

? ? ? ? ? ? appid: appid,

? ? ? ? ? ? body: body,

? ? ? ? ? ? mch_id: mch_id, ? ? ?//商戶id

? ? ? ? ? ? nonce_str: nonce_str, ? ? ? //隨機(jī)數(shù)字符串

? ? ? ? ? ? notify_url: notify_url,

? ? ? ? ? ? openid: openid,

? ? ? ? ? ? out_trade_no: out_trade_no, ? ? // 訂單號

? ? ? ? ? ? spbill_create_ip: spbill_create_ip,

? ? ? ? ? ? total_fee: total_fee,

? ? ? ? ? ? trade_type: 'JSAPI',

? ? ? }

? ? ? var sign = generateSign(params); ? ? ?// 生成簽名

? ? ? params.sign = sign;

? ? ? params = json2xml.buileObject({ xml, params }); ? ? ? ?// json轉(zhuǎn)xml

? ? ? var result = httpPost(url, params); ? ? ? ?// HTTP POST

? ? ? result = xml2json(result).xml; ? ? ? ?// 結(jié)果 xml 轉(zhuǎn) json,從中獲取訂單號等信息

...

}

二.客服接口相關(guān)

1.相對于支付接口,客服接口接比較坑,因為支付接口只要細(xì)心,確保了簽名正確,然后在支付推送接口中解析微信返回的參數(shù)即可??头涌冢f記住,如果只是單純的進(jìn)行小程序客服,不涉及到自定義客服消息,千萬不要去設(shè)置消息推送,因為一旦設(shè)置,用戶發(fā)給小程序的消息都將被轉(zhuǎn)發(fā)到已填寫的服務(wù)器地址,因此在小程序客服網(wǎng)頁就看不到客服消息了!如果不需要自定義客服消息的,那下面內(nèi)容可以不用看了。

未完待續(xù)......

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 引言 秋高氣爽,天氣轉(zhuǎn)涼,正是學(xué)習(xí)工作做的好時候。(~ ̄▽ ̄)~~(~ ̄▽ ̄)~ 我是個phper最近在寫微信支付...
    恩就是這個名閱讀 8,222評論 2 15
  • 該文僅對于中間這種支付方式有參考價值喲 一、開發(fā)背景 在微信公眾號中,需要進(jìn)行微信支付且為微信公眾號網(wǎng)頁支付。 二...
    英文名叫夏天閱讀 2,003評論 0 7
  • 一、背景介紹 作為一名Android開發(fā),從最初的跌跌撞撞到現(xiàn)在小有所悟,這其中經(jīng)歷過的辛酸苦辣也是一種痛并快樂著...
    freecats08閱讀 5,139評論 7 54
  • 因為之前聽過三公子的理財分享,記得她推薦過這本書。剛好端午節(jié)老秦也鼓勵大家做了目標(biāo),就選擇讀了這本書?!缎」峰X錢》...
    冉斐閱讀 666評論 0 0
  • 三行詩—情話 一段情話 好似甜瓜 嘗了不忍刷牙 三行詩—短信 一條短信 最近可好? 讀了半個仲夏 三行詩—愛 愛是...
    三少爺?shù)奶?/span>閱讀 994評論 21 23

友情鏈接更多精彩內(nèi)容