Heim  >  Artikel  >  WeChat-Applet  >  Aktivierung der Unternehmensübertragung auf die Benutzeroberfläche

Aktivierung der Unternehmensübertragung auf die Benutzeroberfläche

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

Dieses Mal werde ich Ihnen die Aktivierung der Unternehmensübertragung auf die Benutzeroberfläche vorstellen. Was sind die Vorsichtsmaßnahmen für die Aktivierung der Unternehmensübertragung auf die Benutzeroberfläche? Hier sind praktische Fälle.

Es gibt keine solche Schnittstelle in der offiziellen WeChat-Kontozahlungs-API, wenn das Unternehmen Geld an den Benutzer überweisen muss oder dem Benutzer erlauben muss, Bargeld abzuheben oder Senden Sie dem Benutzer einen roten Umschlag. Bitte aktivieren Sie diesen bei Bedarf separat im Produktcenter der Händlerplattform.

1. Aktivierung der Funktion

Die Aktivierung ist nur ein Klick, ganz einfach. Es ist jedoch zu beachten, dass das Konto, das Überweisungen an Benutzer unterstützt, und das Konto, das Zahlungen von Benutzern empfängt, nicht identisch sind. Um diese Funktion zu erfüllen, müssen Sie zuerst eine Aufladung bei Tenpay durchführen (Transaction Center – Fonds). Management – ​​Aufladen ).

2. Laden Sie das Zertifikat herunter

Das Zertifikat wird im Account Center – API-Sicherheit heruntergeladen. Jetzt benötigen Sie den Verifizierungscode für Ihr Mobiltelefon und das Anmeldekennwort für die Händlerplattform. Nach dem Herunterladen installieren Sie es unter Windows. Das Passwort für die Installation ist Ihre Händlernummer.

Nach der Installation legen Sie das Zertifikat im Website-Verzeichnis ab, um es im nächsten Schritt im Code zu überprüfen.

3. Übertragung

Die derzeit von WeChat bereitgestellte Demo enthält diesen Teil nicht. Nehmen wir einige Änderungen an der offiziellen Demo vor. Ähnlich wie im vorherigen Beispiel müssen wir alle das WxPayData-Objekt verwenden, um unsere Parameter zu manipulieren. Definieren Sie ein TransfersPay-Objekt.

  public class TransfersPay
    {        public string openid { get; set; }        public int amount { get; set; }        public string partner_trade_no { get; set; }        public string re_user_name { get; set; }        public string spbill_create_ip { get; set; }        public WxPayData GetTransfersApiParameters()
        {
            WxPayData apiParam = new WxPayData();
            apiParam.SetValue("partner_trade_no", partner_trade_no);
            apiParam.SetValue("openid", openid);
            apiParam.SetValue("check_name", "NO_CHECK");
            apiParam.SetValue("amount", amount);
            apiParam.SetValue("desc", "提现");
            apiParam.SetValue("spbill_create_ip", spbill_create_ip);
            apiParam.SetValue("re_user_name", re_user_name);            return apiParam;
        }
    }

Die WxpayApi in der offiziellen Demo enthält bereits Methoden im Zusammenhang mit der offiziellen Kontozahlung. Fügen Sie eine weitere Überweisungsmethode hinzu, um Geld zu überweisen:

 public static WxPayData Transfers(WxPayData inputData, int timeOut = 6)
        {            var url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
            inputData.SetValue("mch_appid", WxPayConfig.APPID);//公众账号ID
            inputData.SetValue("mchid", WxPayConfig.MCHID);//商户号
            inputData.SetValue("nonce_str", WxPayApi.GenerateNonceStr());//随机字符串
            inputData.SetValue("sign", inputData.MakeSign());//签名
            string xml = inputData.ToXml();            var start = DateTime.Now;
            string response = HttpService.Post(xml, url, true, timeOut);            // Portal.MVC.Logger.Info("WxPayApi"+ "UnfiedOrder response : " + response);
            var end = DateTime.Now;            int timeCost = (int)((end - start).TotalMilliseconds);
            WxPayData result = new WxPayData();
            result.FromXml(response);
            ReportCostTime(url, timeCost, result);//测速上报
            return result;
        }

Es ist zu beachten, dass sich die Namen mehrerer Standardparameter von anderen Methoden unterscheiden, z. B. appid und mch_id. In der Übertragung lauten sie mch_appid und mchid, im roten Umschlag heißen sie auch wxappid und mch_id. Beachten Sie dann, dass der dritte Parameter der Methode httpService.post wahr ist. Das heißt, das Zertifikat wird verwendet. Wenn wir die Post-Methode eingeben, sehen wir:

         //是否使用证书
                if (isUseCert)
                {                    string path = HttpContext.Current.Request.PhysicalApplicationPath;                    X509Certificate2 cert = new X509Certificate2(path + WxPayConfig.SSLCERT_PATH, WxPayConfig.SSLCERT_PASSWORD);
                    request.ClientCertificates.Add(cert);
                    Log.Debug("WxPayApi", "PostXml used cert");
                }

Hier werden der Pfad und das Passwort des Zertifikats verwendet, und das Passwort ist die Händlernummer. Nachdem alles fertig ist, können Sie im Controller Geld überweisen:

     [LoginValid]        public ActionResult CashTransfers(string orderNumber)
        {            //var order = new Order(){Amount = 1};           // var openid = "oBSBmwQjqwjfzQlKsFNjxFLSixxx";
            var user = _workContext.CurrentUser;            var order = _paymentService.GetOrderByOrderNumber(orderNumber);            var transfer = new TransfersPay
            {
                openid = user.OpenId,
                amount = (int) order.Amount*100,
                partner_trade_no = order.OrderNumber,
                re_user_name = "stoneniqiu",
                spbill_create_ip = _webHelper.GetCurrentIpAddress()
            };            var data = transfer.GetTransfersApiParameters();            var result = WxPayApi.Transfers(data);            return Content(result.ToPrintStr());
        }

Ergebnis abrufen

Auf diese Weise erfolgt die Überweisungs-/Auszahlungsfunktion realisiert.

Freigabe

In einer formellen Umgebung müssen wir zuerst unsere eigene Bestellung erstellen, dann eine Übertragung an WeChat anfordern und unsere Bestellung nach Erfolg bearbeiten. CashTransfers-Methode leicht angepasst.

       [LoginValid]        public ActionResult CashTransfers(string orderNumber)
        {
            var user = _workContext.CurrentUser;            var order = _paymentService.GetOrderByOrderNumber(orderNumber);            if (string.IsNullOrEmpty(user.OpenId))
            {                return Json(new PortalResult("请用微信登录!"));
            }            if (order == null || order.OrderState != OrderState.Padding)
            {                return Json(new PortalResult("订单有误!"));
            }            
            var transfer = new TransfersPay
            {
                openid = user.OpenId,
                amount = (int) order.Amount*100,
                partner_trade_no = order.OrderNumber,
                re_user_name = "stoneniqiu",
                spbill_create_ip = _webHelper.GetCurrentIpAddress()
            };            var data = transfer.GetTransfersApiParameters();            var result = WxPayApi.Transfers(data);            if (result.GetValue("result_code").ToString() == "SUCCESS")
            {                return Json(new PortalResult(true, "提现成功"));
            }            return Json(new PortalResult(false, result.GetValue("return_msg").ToString()));            
        }

Außerdem ist zu beachten, dass der Vorgangs-Timeout-Fehler immer nach der Veröffentlichung auftritt. Der Vorschlag besteht darin, das Timeout auf 30 Sekunden zu ändern. Die Standardeinstellung von 6 Sekunden kann zu Zeitüberschreitungen führen. Das Gleiche gilt bei gemeinsamer Auftragserteilung.

 public static WxPayData Transfers(WxPayData inputData, int timeOut = 30)

Wenn das Geld auf dem Geschäftskonto aufgebraucht ist, erscheint die folgende Meldung:

Ich glaube, dass Sie die Methode nach dem Lesen beherrschen Fall in diesem Artikel, mehr Bitte beachten Sie andere verwandte Artikel auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Die Verwendung der automatischen Aktualisierung und Analyse von Webpacks

Die Verwendung des H5-Cache-Manifests


Das obige ist der detaillierte Inhalt vonAktivierung der Unternehmensübertragung auf die Benutzeroberfläche. 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