Maison  >  Article  >  Applet WeChat  >  Activation du transfert d'entreprise vers l'interface utilisateur

Activation du transfert d'entreprise vers l'interface utilisateur

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

Cette fois, je vais vous présenter l'activation du transfert d'entreprise vers l'interface utilisateur. Quelles sont les précautions pour l'activation du transfert d'entreprise vers l'interface utilisateur. Voici des cas pratiques, jetons un coup d'oeil.

Il n'existe pas d'interface de ce type dans l'API de paiement du compte officiel WeChat Si une entreprise doit transférer des fonds aux utilisateurs, ou permettre aux utilisateurs de retirer de l'argent ou d'envoyer des utilisateurs. enveloppes rouges Veuillez l'activer séparément dans le centre produit de la plateforme marchand si nécessaire.

1. Activer la fonction

L'activation se fait en un seul clic, très simple. Cependant, il convient de noter que le compte qui prend en charge les transferts vers les utilisateurs et le compte qui reçoit les paiements des utilisateurs ne sont pas les mêmes. Afin de répondre à cette fonction, vous devez d'abord recharger avec Tenpay (Transaction Center--Fund. Gestion--Recharge ).

2. Téléchargez le certificat

Le certificat est téléchargé dans le Centre de comptes - Sécurité API. Vous avez maintenant besoin du code de vérification du téléphone mobile et du mot de passe de connexion à la plateforme marchande. Après le téléchargement, installez-le sous Windows. Le mot de passe pour l'installation est votre numéro de commerçant.

Après l'installation, placez le certificat dans le répertoire du site Web pour vérification dans le code à l'étape suivante.

3. Transfert

La démo actuellement fournie par WeChat n'inclut pas cette partie. Apportons quelques modifications basées sur la démo officielle. Semblable à l'exemple précédent, nous devons tous utiliser l'objet WxPayData pour manipuler nos paramètres. Définissez un objet TransfersPay.

  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;
        }
    }

Le WxpayApi dans la démo officielle contient déjà des méthodes liées au paiement par compte officiel. Ajoutez une autre méthode de transfert pour transférer de l'argent :

 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;
        }

Il convient de noter que les noms de plusieurs paramètres par défaut sont différents des autres méthodes, telles que appid et mch_id. Dans le transfert, ils sont mch_appid et mchid, et dans l'enveloppe rouge, ils sont aussi appelés wxappid et mch_id. Notez ensuite que le troisième paramètre de la méthode httpService.post est vrai. Autrement dit, le certificat sera utilisé. En entrant la méthode de publication, nous pouvons voir :

         //是否使用证书
                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");
                }

Le chemin et le mot de passe du certificat sont utilisés ici, et le mot de passe est le numéro du commerçant. Une fois que tout est prêt, vous pouvez transférer de l'argent dans le contrôleur :

     [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());
        }

Obtenir le résultat

De cette façon, la fonction de transfert/retrait est réalisé.

Libération

Dans un environnement formel, nous devons d'abord créer notre propre commande, puis demander un transfert vers WeChat et traiter notre commande après succès. Méthode CashTransfers légèrement ajustée.

       [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()));            
        }

Une autre chose à noter est que l'erreur de délai d'attente de l'opération se produit toujours après la publication. La suggestion est de modifier le délai d'attente à 30 secondes. La valeur par défaut de 6 secondes est sujette à un délai d'attente. Il en va de même lorsque vous passez des commandes ensemble.

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

Si l'argent sur le compte professionnel a disparu, l'invite suivante apparaîtra :

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article, plus Veuillez prêter attention aux autres articles connexes sur le site Web php chinois !

Lecture recommandée :

L'utilisation de l'actualisation et de l'analyse automatiques du webpack

L'utilisation du manifeste de cache H5


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn