在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 應用軟件教程 > 詳細頁面

對于node.js完成微信支付退款的技巧

對于node.js完成微信支付退款的技巧

更新時間:2025-09-25 文章作者:未知 信息來源:網絡 閱讀次數:

微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一...
微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一項門檻非常高的創新,經過將近兩年的發展,已經構造了新的小程序開發環境和開發者生態。
這篇文章主要介紹了node.js實現微信支付退款功能,在微信開發中有有付款就會有退款,這樣的功能非常常見,需要的朋友可以參考下

緣起

有付款就會有退款

注意,退款支持部分退款

左口袋的錢退到右口袋羅

關于node.js實現微信支付退款的功能

這次發起的退款請求0.01元是實時到賬的,因此,用戶在小程序端發起的退款只是一個請求到后臺,后臺審核人員審核無誤后才后微信發起退款操作。

引入第三方module

在package.json 中加入"weixin-pay": "^1.1.7"這一條

代碼目錄結構

關于node.js實現微信支付退款的功能

入參

{ transaction_id: '4200000005201712165508745023', // 交易
 out_trade_no: '5b97cba0ae164bd58dfe9e77891d3aaf', // 自己這頭的交易號
 out_refund_no: '6f3240c353934105be34eb9f2d364cec', // 退款訂單,自己生成
 total_fee: 1, // 退款總額
 nonce_str: '1xSZW0op0KcdKoMYxnyxhEuF1fAQefhU', // 隨機串
 appid: 'wxff154ce14ad59a55', // 小程序 appid
 mch_id: '1447716902', // 微信支付商戶id
 sign: '416FCB62F9B8F03C82E83052CC77524B' // 簽名,weixin-pay這個module幫助生成 }

然后由wxpay為我們生成其余字段,比如nonce_str,sign,當然還少不了p12證書,

這個早選在wxpay初始代碼里已經配置了,pfx: fs.readFileSync(__dirname + '/../../../cert/apiclient_cert.p12'), //微信商戶平臺證書

lib/wechat/utils/wxpay.js的源碼

const WXPay = require('weixin-pay'); // 引入weixin-pay這個第三方模塊
const {weapp} = require('../../../utils/config'); // 我自己的全局配置文件,包括了appid key 等
const fs = require('fs');
const wxpay = WXPay({
 appid: weapp.APPID,
 mch_id: weapp.MCHID,
 partner_key: weapp.KEY, //微信商戶平臺 API secret,非小程序 secret
 pfx: fs.readFileSync(__dirname + '/../../../cert/apiclient_cert.p12'), 
});

module.exports = wxpay;

另外還有一個util.js工具類

用于驗證與錯誤回調

const wxpay = require('./wxpay');

const validateSign = results => {
 const sign = wxpay.sign(results);
 if (sign !== results.sign) {
 const error = new Error('微信返回參數簽名結果不正確');
 error.code = 'INVALID_RESULT_SIGN';
 throw error;
 };
 return results;
};

const handleError = results => {
 if (results.return_code === 'FAIL') {
 throw new Error(results.return_msg);
 }
 if (results.result_code !== 'SUCCESS') {
 const error = new Error(results.err_code_des);
 error.code = results.err_code;
 throw error;
 }
 return results;
};

module.exports = {
 validateSign,
 handleError,
};

發起退款請求

退款邏輯是這樣的,先從自己這邊的Order數據表中查出transaction_id/out_trade_no/total_fee,再拼上自己生成的out_refund_no退款單號,本次退款部分金額refund_fee,最后由weixin-pay這個模塊下的wxpay.refund調起就可以了,成功就把訂單狀態改成"退款成功"

// 退款
router.post('/refund', function(req, res) {
 Order.findById(req.body._id, (err, order) => {
  if (err) {
   console.log(err);
  }
  console.log(order);
  // 生成微信設定的訂單格式
  var data = {
   transaction_id: order.transactionId,
   out_trade_no: order.tradeId,
   out_refund_no: uuid().replace(/-/g, ''),
   total_fee: order.amount,
   refund_fee: order.amount
  };
  console.log(data);
  // 先查詢訂單,再退訂單
  wxpay.refund(data, (err, result) => {
   if (err) {
    console.log(err);
    res.send(
     utils.json({
      code: 500,
      msg: '退款失敗'
     })
    );
   }
   // 返回退款請求成功后,要將訂單狀態改成REFUNDED
   if (result.result_code === 'SUCCESS') {
    console.log(result);
    order.status = 'REFUNDED';
    order.save((err, response) => {
     res.send(
      utils.json({
       msg: '退款成功'
      })
     );
    });
   } else {
    res.send(
     utils.json({
      code: 500,
      msg: result.err_code_des
     })
    );
   }

  });
 });
});

入參的坑

1.這次遇到的坑是refund_fee忘記傳值,也就是說微信退款是支持部分退款的,如果是全額退款,那么將它賦值為total_fee相同

2.網上說的op_user_id: weapp.MCHID這個參數是非必選的

3.transaction_id 與 out_trade_no 二選一即可,這樣在沒有記錄transaction_id的情況(比如沒有寫支付成功的callback)下,也能發起退款;其中優先級前者大于后者,在我在分別前其一故意給錯的過程中得到了驗證。

4.報了一個appid與商戶號不匹配的報錯,return_code: 'FAIL', return_msg: '商戶號mch_id與appid不匹配'原來是小程序還沒綁定公眾號微信支付,這真是一個烏龍。

成功退款微信返回的數據

 appid:"wxff154ce14ad59a55"
 cash_fee:"1"
 cash_refund_fee:"1"
 coupon_refund_count:"0"
 coupon_refund_fee:"0"
 mch_id:"1447716902"
 nonce_str:"c44wOvB6a4bQJfRk"
 out_refund_no:"9ace1466432a4d548065dc8df95d904a"
 out_trade_no:"5b97cba0ae164bd58dfe9e77891d3aaf"
 refund_channel:""
 refund_fee:"1"
 refund_id:"50000705182017121702756172970"
 result_code:"SUCCESS"
 return_code:"SUCCESS"
 return_msg:"OK"
 sign:"5C2E67B3250054E8A665BF1AE2E9BDA3"
 total_fee:"1"
 transaction_id:”4200000005201712165508745023”

重復退款將返回如下

 appid:"wxff154ce14ad59a55"
 err_code:"ERROR"
 err_code_des:"訂單已全額退款"
 mch_id:"1447716902"
 nonce_str:"KP1YWlU7a5viZEgK"
 result_code:"FAIL"
 return_code:"SUCCESS"
 return_msg:"OK"
 sign:”C2A7DED787BEA644C325E37D96E9F41C”

關于node.js實現微信支付退款的功能

最后

如果沒有寫退款功能或者不想寫退款功能怎么辦,其實可以從微信支付的后臺pay.weixin.qq.com,也是能退款出去的,只是不想忘記了要人工將訂單狀態置為退款狀態。

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

如何利用JS實現仿微信支付彈窗功能

在微信小程序中如何實現自定義toast

以上就是關于node.js實現微信支付退款的功能的詳細內容,更多請關注php中文網其它相關文章!


小程序是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 日韩av在线第一页| 国产精品无码乱伦| 国产一区二区三区小说| www.com污| 青青草久久伊人| 激情文学亚洲色图| 99九九99九九九99九他书对| 北条麻妃av高潮尖叫在线观看| 国产精品久久中文字幕| 久草视频这里只有精品| 少妇久久久久久被弄到高潮| 精品免费久久久久久久| 久久艹国产精品| www成人免费| 亚洲自偷自拍熟女另类| 91淫黄看大片| 午夜免费福利视频在线观看| 国产aⅴ爽av久久久久| 手机精品视频在线| 国产九色porny| 99精品视频播放| 天天操精品视频| 久久久久久久久久伊人| 国产二区视频在线播放| 亚洲一区二区三区四区五区| 日本高清xxxx| 亚洲爆乳无码专区| 国产高清免费在线| 欧美 日韩 国产一区| 少妇一级淫免费放| 性做爰过程免费播放| 高清在线观看免费| 欧洲xxxxx| 国产精品欧美激情在线观看| 日韩一级免费片| 欧美性潮喷xxxxx免费视频看| 国产一区亚洲二区三区| 波多野结衣免费观看| 国产精品无码一区二区在线| 成人日韩在线视频| 免费看国产一级片| 五月天av影院| 中文字幕av不卡在线| japanese在线播放| jizz大全欧美jizzcom| 久久手机在线视频| 肉色超薄丝袜脚交| 69堂免费视频| 300部国产真实乱| 国产精品一区二区小说| 霍思燕三级露全乳照| 黄色网在线视频| 欧美精品一区二区性色a+v| 欧在线一二三四区| 国产毛片视频网站| 欧美一级爱爱视频| 亚洲一二区在线观看| 99视频在线视频| 狠狠热免费视频| 欧美在线观看成人| 免费国产黄色网址| 婷婷五月综合缴情在线视频| 国产freexxxx性播放麻豆 | 99热这里只有精品在线播放| 日本中文字幕亚洲| 天堂8在线天堂资源bt| 国产精品无码电影在线观看| 欧美少妇一区二区三区| 波多野结衣在线免费观看| av中文字幕网址| 亚洲国产成人va在线观看麻豆| 网站一区二区三区| 亚洲高清在线免费观看| 久久撸在线视频| 青青草原国产在线视频| 亚洲欧美一区二区三区不卡| 400部精品国偷自产在线观看| 国产奶头好大揉着好爽视频| 美国av在线播放| 白白操在线视频| 大陆极品少妇内射aaaaa| 国产高清精品在线观看| 三年中国国语在线播放免费| 国产又黄又猛的视频| gogogo免费高清日本写真| 91免费国产精品| 男女高潮又爽又黄又无遮挡| 邪恶网站在线观看| 日韩高清在线一区二区| 996这里只有精品| 国产裸体舞一区二区三区| 波多野结衣国产精品| 激情成人开心网| 一级黄色香蕉视频| 青娱乐国产精品视频| 999在线观看视频| 国产日韩欧美久久| 日本熟妇人妻xxxx| 成熟老妇女视频| 欧美aaa在线观看| 波多野结衣50连登视频| www.午夜av| 国产日韩一区二区在线观看| 性鲍视频在线观看| 日韩中文字幕二区| 国产成人在线小视频| 亚洲一区二区三区四区五区| www.国产在线播放| 天堂av.com| 一区二区在线播放视频| www.夜夜爱| 性欧美18一19内谢| 天天操,天天操| 成人在线观看黄| 无码 制服 丝袜 国产 另类| 亚洲国产日韩欧美在线观看| 日本一本二本在线观看| av一区二区三区免费观看| 五月天视频在线观看| 草草草在线视频| 欧美亚洲国产成人| www污在线观看| 国产又粗又猛大又黄又爽| 美女网站视频黄色| 人妻无码视频一区二区三区| av日韩一区二区三区| 在线观看污视频| 黄色网zhan| 一本二本三本亚洲码| 国产又粗又长又爽又黄的视频| 日本在线观看免费视频| www.色就是色| 国产高清视频网站| 亚洲小视频网站| 国产福利精品一区二区三区| 日韩肉感妇bbwbbwbbw| 色天使在线观看| 色91精品久久久久久久久| 日韩av片专区| 99精品视频网站| www.成年人视频| 国产曰肥老太婆无遮挡| 日韩免费一级视频| 无码人妻丰满熟妇区毛片18| 国产男女激情视频| 欧美wwwwwww| 国产又爽又黄ai换脸| 2021国产视频| 免费视频爱爱太爽了| 日韩在线综合网| 污视频网址在线观看| 激情图片qvod| 无码粉嫩虎白一线天在线观看| www.射射射| 日本激情综合网| 中文字幕一区二区三区四区五区人 | 一区二区成人网| 激情图片中文字幕| 久久www视频| 欧美少妇性生活视频| 欧美国产日韩另类 | aa视频在线播放| 精品免费国产一区二区| 午夜免费一级片| 欧美成人高潮一二区在线看| 免费激情视频在线观看| 香蕉视频xxxx| 国产日韩一区二区在线观看| 亚洲免费av网| 日韩av资源在线| 91国在线高清视频| 已婚少妇美妙人妻系列| 九九久久九九久久| 久久精品影视大全| 国产老熟妇精品观看| 污污视频网站在线| 成人亚洲视频在线观看| 国产在线无码精品| 日本77777| 妺妺窝人体色www在线观看| 国产情侣第一页| 中文字幕天天干| 成人久久久久久久久| 日韩亚洲欧美一区二区| 超碰在线公开97| 黑鬼大战白妞高潮喷白浆| 国产免费裸体视频| 懂色av一区二区三区四区五区| 亚洲精品怡红院| 999精品网站| av免费中文字幕| 黄色影院一级片| 日本三级免费网站| 乱妇乱女熟妇熟女网站| 国产a级黄色大片| 大地资源第二页在线观看高清版| 日本久久久久久久久久久久| 欧美激情精品久久久久久小说| 人妻久久久一区二区三区| www插插插无码免费视频网站|