今回は、エンタープライズユーザーインターフェイスへの転送の有効化について説明します。エンタープライズユーザーインターフェイスへの転送を有効にするための注意事項を紹介します。実際のケースを見てみましょう。
WeChat 公式アカウント支払い API にはそのようなインターフェイスはありません。企業がユーザーに お金を送金したり、ユーザーに現金を引き出すことを許可したり、ユーザーに 赤い封筒を送ったりする必要がある場合。マーチャントプラットフォームの製品センターで個別にオープンされます。
有効化はワンクリックで非常に簡単です。ただし、ユーザーへの送金をサポートするアカウントとユーザーからの支払いを受け取るアカウントは同じではないことに注意してください。この機能を満たすためには、まず Tenpay でチャージする必要があります (トランザクション センター - 資金管理 -)。 -充電) 。
証明書はアカウント センター - API セキュリティでダウンロードされます。携帯電話の 認証コード と販売者プラットフォームのログイン パスワードが必要です。ダウンロード後、Windows にインストールします。インストール用のパスワードは加盟店番号です。
インストール後、次のステップのコードで検証するために証明書を Web サイトのディレクトリに配置します。
現在WeChatで提供されているデモにはこの部分が含まれていません。公式デモをベースにいくつか修正を加えてみましょう。前の例と同様に、パラメーターを操作するには WxPayData オブジェクトを使用する必要があります。 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; } }
公式デモの WxpayApi には、公式アカウントの支払いに関連するメソッドがすでに含まれています。送金するために別の Transfers メソッドを追加します:
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; }
注意する必要があるのは、いくつかのデフォルト パラメータの名前が、appid や mch_id などの他のメソッドとは異なることです。転送では、これらは mch_appid および mchid であり、赤い封筒では、wxappid および mch_id とも呼ばれます。次に、httpService.post メソッドの 3 番目のパラメータが true であることに注目してください。つまり、証明書が使用されます。投稿メソッドを入力すると、次のことがわかります:
//是否使用证书 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"); }
ここでは証明書のパスとパスワードが使用されており、パスワードは販売者番号です。すべての準備ができたら、コントローラーで送金できます:
[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()); }
結果を取得
このようにして、送金/出金機能が実現されます。
正式な環境では、最初に独自の注文を作成し、次に WeChat への転送をリクエストし、成功後に注文を処理する必要があります。 CashTransfers メソッドをわずかに調整しました。
[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())); }
もう 1 つの注意点は、公開後に操作タイムアウト エラーが常に発生することです。タイムアウトを 30 秒に変更することをお勧めします。デフォルトの 6 秒ではタイムアウトが発生する可能性があります。 まとめてご注文の場合も同様となります。
public static WxPayData Transfers(WxPayData inputData, int timeOut = 30)
ビジネスアカウントのお金がなくなった場合は、次のプロンプトが表示されます:
この記事のケースを読んだ後は、この方法を習得したと思います。さらに興味深い情報については、他の関連情報に注意してください。 php 中国語 Web サイトに記事が掲載されました。
推奨読書:
以上がユーザーインターフェイスへのエンタープライズ転送のアクティブ化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。