Heim  >  Artikel  >  WeChat-Applet  >  Entwicklung einer Rückerstattungsfunktion für WeChat Pay

Entwicklung einer Rückerstattungsfunktion für WeChat Pay

php中世界最好的语言
php中世界最好的语言Original
2018-03-16 13:42:2410512Durchsuche

Dieses Mal werde ich Ihnen die Entwicklung der Rückerstattungsfunktion von WeChat Pay vorstellen. Was sind die Vorkehrungen für die Entwicklung der Rückerstattungsfunktion von WeChat Pay? sehen.

Beschweren wir uns zunächst über die Dokumentation und Demo von WeChat. Die wichtigen Schrittinformationen werden nicht klar hervorgehoben und die .net-Demo wurde nie erfolgreich ausgeführt.

1. Scannen Sie den WeChat-QR-Code, um sich anzumelden

2. WeChat-PC-Zahlung

Es dauerte mehrere Versuche, diese Rückerstattungsfunktion zu nutzen. Im Folgenden finden Sie eine Einführung in die Entwicklungsschritte der WeChat-Zahlungsrückerstattungsfunktion:

1 Laden Sie das Zertifikat herunter und importieren Sie es in das System.

Für die WeChat-Rückerstattung ist kein Zertifikat erforderlich Zertifikat in der offiziellen Demo, aber es handelt sich um ein Zertifikat, das Sie aus der API-Sicherheitsspalte auf der WeChat-Händlerplattform herunterladen müssen. In einem Word-Dokument des offiziellen Beispiels für die Verwendung des Zertifikats können Sie die folgenden Wörter sehen: C# Dort Zusätzlich zur Verwendung von apiclient_cert.p12 zu beachten, dass das Zertifikat in das Betriebssystem importiert werden muss, bevor es verwendet werden kann. Wird im Code verwendet. 2. Import in das Betriebssystem, beides ist unverzichtbar. .NET-Version muss größer als 2.0 sein Ich kannte diese beiden Schritte vorher nicht und habe zu viel Zeit verschwendet. Laden Sie also zuerst das Zertifikat herunter:

Beim Herunterladen sind eine Mobiltelefonverifizierung und ein Login-Passwort erforderlich. Suchen Sie nach dem Herunterladen das Zertifikat apiclient_cert.p12

und doppelklicken Sie, um es zu importieren. Beim Importieren werden Sie aufgefordert, ein Passwort einzugeben, und es muss das heruntergeladene Zertifikat sein Ihre eigene Händlerplattform. Andernfalls erscheint eine Passwortfehlermeldung:

Importieren Sie die richtige Eingabeaufforderung:

2. Code-Rückerstattung

Sie können den Code in der offiziellen Demo hier direkt verwenden. Laden Sie die Demo herunter.

Sie müssen mehrere Parameter in WxPayConfig ändern:

Das obige SSLCERT_PASSWORD ist MCHID Ist die Händler-ID, weist der Fehler SSLCERT_PASSWORD darauf hin, dass das angegebene Netzwerkkennwort falsch ist:

      public const string APPID = "wxf6dd794bcexxxx";        public const string MCHID = "xxxx";        public const string KEY = "xxxxx849ba56abbe56e05xxxxx";        public const string APPSECRET = "---";        //=======【证书路径设置】===================================== 
        /* 证书路径,注意应该填写绝对路径(仅退款、撤销订单时需要)        */
        public const string SSLCERT_PATH = "/WxPayAPI/cert/apiclient_cert.p12";        public const string SSLCERT_PASSWORD = "131xxxx";

Fügen Sie als Nächstes eine Rückerstattungsmethode im Controller

hinzu, einschließlich WeChat Bestellnummer, Händlerbestellnummer, Gesamtbetrag und Rückerstattungsbetrag. Wählen Sie entweder die Händlerbestellnummer oder die WeChat-Bestellnummer. Detaillierte Parameter

Methode der Refund-Klasse ausführen:

  public ActionResult DoRefund()
        {            string result = Refund.Run("","131667780120trade_no", "1", "1");            return Content(result);
        }

Refund: Methode

 /***
        * 申请退款完整业务流程逻辑
        * @param transaction_id 微信订单号(优先使用)
        * @param out_trade_no 商户订单号
        * @param total_fee 订单总金额
        * @param refund_fee 退款金额
        * @return 退款结果(xml格式)        */
        public static string Run(string transaction_id, string out_trade_no, string total_fee, string refund_fee)
        {
            Logger.Info("Refund is processing...");
            WxPayData data = new WxPayData();            if (!string.IsNullOrEmpty(transaction_id))//微信订单号存在的条件下,则已微信订单号为准            {
                data.SetValue("transaction_id", transaction_id);
            }            else//微信订单号不存在,才根据商户订单号去退款            {
                data.SetValue("out_trade_no", out_trade_no);
            }
            data.SetValue("total_fee", int.Parse(total_fee));//订单总金额
            data.SetValue("refund_fee", int.Parse(refund_fee));//退款金额
            data.SetValue("out_refund_no", out_trade_no);//随机生成商户退款单号
            data.SetValue("op_user_id", WxPayConfig.MCHID);//操作员,默认为商户号
            WxPayData result = WxPayApi.Refund(data);//提交退款申请给API,接收返回数据
            Logger.Info("Refund process complete, result : " + result.ToXml());            return result.ToPrintStr();
        }

Denken Sie daran, sie an Ihre eigenen Parameter in der Produktionsumgebung anzupassen . Wenn die Parameter korrekt sind, wird Folgendes zurückgegeben:

 /**
        * 
        * 申请退款
        * @param WxPayData inputObj 提交给申请退款API的参数
        * @param int timeOut 超时时间
        * @throws WxPayException
        * @return 成功时返回接口调用结果,其他抛异常        */
        public static WxPayData Refund(WxPayData inputObj, int timeOut = 6)
        {            string url = "https://api.mch.weixin.qq.com/secapi/pay/refund";            //检测必填参数
            if (!inputObj.IsSet("out_trade_no") && !inputObj.IsSet("transaction_id"))
            {                throw new WxPayException("退款申请接口中,out_trade_no、transaction_id至少填一个!");
            }            else if (!inputObj.IsSet("out_refund_no"))
            {                throw new WxPayException("退款申请接口中,缺少必填参数out_refund_no!");
            }            else if (!inputObj.IsSet("total_fee"))
            {                throw new WxPayException("退款申请接口中,缺少必填参数total_fee!");
            }            else if (!inputObj.IsSet("refund_fee"))
            {                throw new WxPayException("退款申请接口中,缺少必填参数refund_fee!");
            }            else if (!inputObj.IsSet("op_user_id"))
            {                throw new WxPayException("退款申请接口中,缺少必填参数op_user_id!");
            }
            inputObj.SetValue("appid", WxPayConfig.APPID);//公众账号ID
            inputObj.SetValue("mch_id", WxPayConfig.MCHID);//商户号
            inputObj.SetValue("nonce_str", Guid.NewGuid().ToString().Replace("-", ""));//随机字符串
            inputObj.SetValue("sign", inputObj.MakeSign());//签名
            
            string xml = inputObj.ToXml();            var start = DateTime.Now;
            Log.Debug("WxPayApi", "Refund request : " + xml);            string response = HttpService.Post(xml, url, true, timeOut);//调用HTTP通信接口提交数据到API
            Log.Debug("WxPayApi", "Refund response : " + response);            var end = DateTime.Now;            int timeCost = (int)((end - start).TotalMilliseconds);//获得接口耗时            //将xml格式的结果转换为对象以返回
            WxPayData result = new WxPayData();
            result.FromXml(response);
            ReportCostTime(url, timeCost, result);//测速上报
            return result;
        }

Darüber hinaus erhält WeChat sofort eine Rückerstattungsbenachrichtigung:

Zusammenfassung: Zu diesem Zeitpunkt wurde die Rückerstattungsfunktion implementiert. Wenn die Parameter und Prozesse korrekt sind, ist es an dieser Stelle immer noch sehr einfach, Rückerstattungen für Transaktionen innerhalb eines Jahres zu beantragen.

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Wie man den Gradienten von ss3 verwendet


Detaillierte Erklärung von Promise in jQuery, Angular und Node


Ausführliche Erklärung der H5-Videowiedergabebibliothek video.js

Das obige ist der detaillierte Inhalt vonEntwicklung einer Rückerstattungsfunktion für WeChat Pay. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn