数日前、会社のプロジェクトの要件により、WeChat を使用してオンライン リチャージするための機能を作成したいと思いました。これは、WeChat ブラウザーで Web ページをクリックして WeChat 支払いを呼び出すものです。次に、開発プロセスについて簡単に説明します。 WeChat 支払いの 公式アカウント支払い :
まず第一に、あなたの公式アカウントは 認定されたサービス アカウントである必要があり、コードを開発して記述する前に、WeChat 支払いの許可が有効化されている必要があります。支払いを設定する必要があります。その後の操作を容易にするための関連情報 有効化後、公式アカウント販売者プラットフォームのバックグラウンド ログインに関連する情報が含まれる電子メールが送信されます。 販売者プラットフォームにログインした後、キーを設定します。 ->アカウント設定->APIセキュリティ、これは後で使用されます
アカウントパラメータの説明
APIパラメータ名 | 詳細説明 | |
---|---|---|
appid | appid パブリックプラットフォームでパブリックアカウントを申請した後、またはオープンプラットフォームでAPPアカウントを申請した後の、WeChatパブリックアカウントまたはオープンプラットフォームAPPの一意の識別子です。 , WeChat はアプリケーションを識別するために、対応する appid を自動的に割り当てます。このフィールドの値は、販売者の WeChat Payment 承認メールにも含まれます。 | |
mch_id | 加盟店がWeChatペイメントを申請した後、WeChatペイメントによって割り当てられる加盟店の支払いアカウント。 | |
key | 取引プロセス中の署名によって生成されたキーは、販売者システムとWeChat支払いのバックグラウンドにのみ保持され、ネットワーク内に拡散することはありません。マーチャントは、キーが漏洩しないように、キーを適切に保管し、ネットワーク上で送信したり、他のクライアントに保管したりしないようにする必要があります。販売者は、設定する電子メールのプロンプトに従って WeChat 販売者プラットフォームにログインできます。 | |
secret | AppSecret は、APPID に対応するインターフェースのパスワードであり、インターフェース呼び出し資格情報 access_token を取得するために使用されます。 WeChat 支払いでは、最初に OAuth2.0 インターフェイスを通じてユーザーの openid が取得され、この openid は WeChat 内の Web 支払いモードの注文インターフェイスによって使用されます。開発モードで AppSecret を取得します (開発者になり、アカウントに異常がない状態)。 |
主要な加盟店システムとWeChat支払いシステムアクション:
1. マーチャントサーバーは、統合注文インターフェースを呼び出して注文をリクエストします。API については、前払い注文をリクエストする前に、WeChat OAuth2.0 Web ページを呼び出す必要があります。ユーザーがユーザーの WeChat OpenId を取得するためのコードです。ここでは詳しく説明しません。以下は、前払い注文のコード実装です。
string timeStamp = TenPayUtil.GetTimestamp(); string nonceStr = TenPayUtil.GetNoncestr(); string paySign = string.Empty; //创建支付应答对象 var packageReqHandler = new RequestHandler(null); string spbill_create_ip = Request.UserHostAddress; //初始化 //packageReqHandler.Init(); //packageReqHandler.SetKey(TenPayInfo.Key); //设置package订单参数 packageReqHandler.SetParameter("appid", appID); //公众账号ID packageReqHandler.SetParameter("body", StrUtil.GetCutString(productName, 100)); //不能超过127个字符 packageReqHandler.SetParameter("mch_id", mchid); //商户号 packageReqHandler.SetParameter("nonce_str", nonceStr.ToLower()); //随机字符串 packageReqHandler.SetParameter("notify_url", notifyUrl); //接收财付通通知的URL packageReqHandler.SetParameter("openid", openId); //openid packageReqHandler.SetParameter("out_trade_no", sp_billno); //商家订单号 // packageReqHandler.SetParameter("attach", ""); //附加数据 未来可用于区分不同微信支付业务 packageReqHandler.SetParameter("spbill_create_ip", spbill_create_ip); //用户的公网ip,不是商户服务器IP packageReqHandler.SetParameter("total_fee", (onlinePayMoney * 100).ToString("0")); //商品金额,以分为单位(money * 100).ToString() packageReqHandler.SetParameter("trade_type", "JSAPI"); //交易类型 //获取package包 string sign = packageReqHandler.CreateMd5Sign("key", TenPayInfo.Key); packageReqHandler.SetParameter("sign", sign); //交易类型 string data = packageReqHandler.ParseXML(); LoggerHelper.Log(data); //调用统一下单接口请求订单 var result = TenPayV3Service.Unifiedorder(data); LoggerHelper.Log(result); var res = XDocument.Parse(result); string prepayId = string.Empty; if (res.Element("xml").Element("return_code").Value == "SUCCESS") { prepayId = res.Element("xml").Element("prepay_id").Value; } string package = string.Format("prepay_id={0}", prepayId); timeStamp = TenPayUtil.GetTimestamp(); //设置支付参数 var paySignReqHandler = new RequestHandler(null); paySignReqHandler.SetParameter("appId", appID); paySignReqHandler.SetParameter("timeStamp", timeStamp); paySignReqHandler.SetParameter("nonceStr", nonceStr); paySignReqHandler.SetParameter("package", package); paySignReqHandler.SetParameter("signType", "MD5"); paySign = paySignReqHandler.CreateMd5Sign("key", TenPayInfo.Key); //将信息传递给支付页面 ViewBag.appId = appID; ViewBag.timeStamp = timeStamp; ViewBag.nonceStr = nonceStr; ViewBag.package = package; ViewBag.paySign = paySign;
2. 加盟店サーバーは支払い通知を受け取り、API はパブリック API【支払い結果通知 API】にあります
<script type="text/javascript"> // 当微信内置浏览器完成内部初始化后会触发WeixinJSBridgeReady事件。 document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() { $(function () { //公众号支付 jQuery('#getBrandWCPayRequest').click(function (e) { WeixinJSBridge.invoke('getBrandWCPayRequest', { "appId": "@ViewBag.appId", //公众号名称 "timeStamp": "@ViewBag.timeStamp", //时间戳 "nonceStr": "@ViewBag.nonceStr", //随机串 "package": "@Html.Raw(ViewBag.package.ToString())",//扩展包 "signType": "MD5", //微信签名方式 "paySign": "@ViewBag.paySign" //微信签名 }, function (res) { if (res.err_msg == "get_brand_wcpay_request:ok") { //alert("微信支付成功!"); window.location.href = "@WxPaySettingConfig.WmallURL/Wmall/TradePay/Success/@ViewBag.ShopId/?orderNo=@orderNoMark"; } else if (res.err_msg == "get_brand_wcpay_request:cancel") { //alert("用户取消支付!"); } else { window.location.href = "/wxpay/jsapi/error/?isPayFail=1&csid=@ViewBag.ShopId&orderNo=@orderNoMark&biztype=1"; } // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。 //因此微信团队建议,当收到ok返回时,向商户后台询问是否收到交易成功的通知,若收到通知,前端展示交易成功的界面;若此时未收到通知,商户后台主动调用查询订单接口,查询订单的当前状态,并反馈给前端展示相应的界面。 }); }); }); //WeixinJSBridge.log('yo~ ready.'); }, false); </script>
WeChat パブリック アカウント開発に関する WeChat 支払い関連記事の詳細はこちら、PHP 中国語 Web サイトに注意してください。