In diesem Artikel wird hauptsächlich die Rückerstattungsfunktion von WeChat vorgestellt. In der WeChat-Entwicklung gibt es eine Rückerstattung, wenn eine Zahlung erfolgt. Freunde, die sie benötigen, können sich darauf beziehen
Herkunft
Es erfolgt eine Rückerstattung, wenn die Zahlung erfolgt ist
Beachten Sie, dass Rückerstattungen teilweise Rückerstattungen unterstützen
Geld aus der linken Tasche zurück in die rechte Tasche
Die diesmal initiierte Rückerstattungsanforderung von 0,01 Yuan geht in Echtzeit ein. Daher erfolgt die vom Benutzer initiierte Rückerstattung am Beim Miniprogramm handelt es sich nur um eine Anfrage. Im Hintergrund wird der Rückerstattungsvorgang auf WeChat erst eingeleitet, nachdem der Hintergrundprüfer überprüft hat, dass alles korrekt ist.
Drittanbietermodul vorstellen
Fügen Sie „weixin-pay“: „^1.1.7“ zu package.json hinzu
Codeverzeichnisstruktur
Eingabeparameter
{ 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帮助生成 }
Dann generiert wxpay die restlichen Felder für uns, wie z. B. nonce_str, sign und natürlich das p12-Zertifikat.
Diese frühe Auswahl wurde im wxpay-Anfangscode konfiguriert, pfx: fs.readFileSync(__dirname + '/../../../cert/apiclient_cert.p12'), //WeChat-Händlerplattform Zertifikat
Quellcode von 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;
Es gibt auch eine util.js-Toolklasse
für Verifizierung und Fehlerrückrufe
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, };
Eine Rückerstattungsanforderung einleiten
Suchen Sie zunächst die Transaktions-ID/out_trade_no/total_fee aus Ihrer eigenen Bestelldatentabelle und fügen Sie dann die von Ihnen generierte out_refund_no-Rückerstattung hinzu Die Nummer „refund_fee“, der Teilbetrag dieser Rückerstattung, kann von wxpay.refund im weixin-pay-Modul abgerufen werden. Bei Erfolg wird der Bestellstatus auf „Rückerstattung erfolgreich“ geändert
// 退款 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 }) ); } }); }); });
Die Fallstricke bei der Teilnahme
1. Der Fallstrick besteht dieses Mal darin, dass „refund_fee“ vergessen hat, den Wert zu übergeben, was bedeutet WeChat Refund unterstützt eine teilweise Rückerstattung, dann weisen Sie ihr den gleichen Wert zu wie total_fee
2. Der im Internet erwähnte Parameter op_user_id: weapp.MCHID ist optional
3. Wählen Sie einfach eine von „transaction_id“ und „out_trade_no“, damit eine Rückerstattung auch dann veranlasst werden kann, wenn die „transaction_id“ nicht erfasst ist (z. B. wird kein Rückruf für eine erfolgreiche Zahlung geschrieben). Also bevor ich die anderen trenne. Es wurde ein absichtlicher Fehler während des Prozesses festgestellt.
4. Es wurde ein Fehler gemeldet, dass die App-ID nicht mit der Händlernummer übereinstimmt, return_code: 'FAIL', return_msg: 'Die Händlernummer mch_id stimmt nicht mit der App-ID überein' Es stellt sich heraus, dass das Miniprogramm nicht übereinstimmt wurde an das offizielle WeChat-Konto gebunden. Das ist wirklich ein Fehler.
Von WeChat zurückgegebene Daten für eine erfolgreiche Rückerstattung
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”
Wiederholte Rückerstattungen werden wie folgt zurückerstattet
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”
Endlich
Was tun, wenn Sie keine Rückerstattungsfunktion haben oder keine Rückerstattungsfunktion schreiben möchten? Tatsächlich können Sie Geld über das Backend von WeChat Pay unter pay.weixin zurückerstatten .qq.com, aber Sie möchten es einfach nicht vergessen. Sie müssen den Bestellstatus manuell auf Rückerstattungsstatus setzen.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
So verwenden Sie JS, um die WeChat-Zahlungs-Popup-Funktion zu implementieren
So implementieren Sie sie im WeChat-Applet Benutzerdefinierter Toast
Das obige ist der detaillierte Inhalt vonÜber node.js, das die Funktion der WeChat-Zahlungsrückerstattung implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!