【微信开发】-- 公众号支付
2017-01-20 08:33
197 查看
公众号支付就是在微信里面的H5页面唤起微信支付,不用扫码即可付款的功能。做这个功能首先要明确的就是,只有和商户号mch_id匹配的appid才能成功支付。商户号在注册成功的时候就会将相关信息发送到邮箱里面。而唤起支付的一个关键是靠openid拿到统一下单。而openid是和appid一一对应的。也就是说如果你登录使用的appid不是公众号的appid,得到的openid就无法唤起公众号内的支付(会出现appid和商户号不匹配的错误)。曾经就在这个地方绕了个弯,因为微信的开放平台可以创建网站应用,也有一个appid和appsecreat,也可以在微信里面一键登录。
View Code
调用的时候这样直接唤起支付了。 但如果传入的json不是json对象,微信加载动画会一直卡在哪儿。
官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3
微信登录:http://www.cnblogs.com/stoneniqiu/p/5380606.html
微信扫码支付及MVC demo:http://www.cnblogs.com/stoneniqiu/p/5525548.html
官方demo:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
业务流程
下面是微信的官方流程,看似有点复杂,重点就是要拿到统一下单接口返回的json串,其他按照官方demo基本就能正确,下面说一下几个细节。function jsApiCall(json, success, fail) { WeixinJSBridge.invoke( 'getBrandWCPayRequest', json,//josn串 function (res) { WeixinJSBridge.log(res.err_msg); //alert(res.err_code + res.err_desc + res.err_msg); if (res.err_msg == "get_brand_wcpay_request:ok") { //充值进去 要区分是出题充值 还是购买悬赏 前者冲到他的钱包 //后者直接冲到系统账户 if (success) success(); } if (res.err_msg == 'get_brand_wcpay_request:cancel') { // alert('取消支付'); if (fail)fail(); } } ); } function callpay(json,success,fail) { if (typeof WeixinJSBridge == "undefined") { alert("请在微信中打开!"); if (document.addEventListener) { document.addEventListener('WeixinJSBridgeReady', jsApiCall, false); } else if (document.attachEvent) { document.attachEvent('WeixinJSBridgeReady', jsApiCall); document.attachEvent('onWeixinJSBridgeReady', jsApiCall); } } else { jsApiCall(json, success, fail); } }
View Code
[LoginValid] public ActionResult H5PayJson(string orederId) { var user = _workContext.CurrentUser; var order = _paymentService.GetOrderByOrderNumber(orederId); //判断订单是否存在 //订单是否已经支付了 var openid = user.OpenId; var jsApipay = new JsApiPayMvc(ControllerContext.HttpContext) { openid = openid, total_fee = (int) order.Amount*100 }; try { jsApipay.GetUnifiedOrderResult(); return Json(jsApipay.GetJsApiParameters());//实际还是字符串 } catch (Exception e) { //统一下单失败 return Json(new PortalResult(false, e.Message)); } }
调用的时候这样直接唤起支付了。 但如果传入的json不是json对象,微信加载动画会一直卡在哪儿。
$.post("/Checkout/H5PayJson", { orederId: orderId }, function (jsondata) { var jdata = JSON.parse(jsondata); if (jdata.appId) { callpay(jdata, function () { $.post("/payment/WeiXinPaySuccess", { ordernumber: orderId }, function (paymentdata) { if (paymentdata.IsSuccess === true) { submitQuestion(); } else { $.alert(paymentdata.Message); } }); }, function () { $.alert("你已取消支付!"); }); } else { alert("统一下单失败!"); } });
官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3
微信登录:http://www.cnblogs.com/stoneniqiu/p/5380606.html
微信扫码支付及MVC demo:http://www.cnblogs.com/stoneniqiu/p/5525548.html
官方demo:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
相关文章推荐
- 微信服务号开发----公众号支付退款
- 微信扫码支付开发-公众号支付开发-视频教程7
- 【微信开发】---- 公众号支付
- 【微信开发】---- 公众号支付
- 微信JSAPI 公众号支付 H5支付以及APP支付 WEBAPI接口开发测试
- 微信开发下载对账单-公众号支付开发-视频教程12
- Java微信开发之公众号支付接口
- Java微信公众平台开发之公众号支付(微信内H5调起支付)
- 微信开发-公众号支付(1)-获取openid
- 微信开发-公众号支付(2)-统一下单
- Java开发微信公众账号支付接口
- 微信刷卡支付开发-公众号支付开发-视频教程8
- Java微信支付开发之公众号支付(微信内H5调起支付)
- 微信开发之公众号支付
- 微信公众服务号申请、认证(开通支付)-微信开发图文教程
- 结合业务设计公众号支付流程,微信企业支付开发
- [036] 微信公众帐号开发教程第12篇-符号表情的发送(下)
- 如何在微信公众帐号开发模式下,通过程序代码向用户发送符号表情。
- [035] 微信公众帐号开发教程第11篇-符号表情的发送(上)
- 微信公众帐号开发教程第13篇-图文消息全攻略 -- 转载