WeChat-JSAPI支付

Posted 山水之间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WeChat-JSAPI支付相关的知识,希望对你有一定的参考价值。

特别注意----JSAPI只能在微信环境下 测试!2017-04-19

配置:微信公众号中 添加微信支付配置--请认真填写配置并获取下面对应的数据才能正常运行。

  =======================【基本信息设置】====================
        /* 微信公众号信息配置
        * APPID:绑定支付的APPID(必须配置)
        * MCHID:商户号(必须配置)
        * KEY:商户支付密钥,参考开户邮件设置(必须配置)
        * APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置)
        */
        public const string APPID = AuthConnect.WeChat_AppId;
        public const string MCHID = "0000000";
        public const string KEY = AuthConnect.WeChat_AppPayKey;
        public const string APPSECRET = AuthConnect.WeChat_AppKey;

1、首先引用API基类:OrderDetail.cs、TenpayUtil.cs、---可以到我的github上获取

2、C# 服务端代码---获取JSAPI需要的各个参数,并返回给前端

UnifiedOrder order = new UnifiedOrder();
        order.appid = AppId;
        order.mch_id = partnerId;
        order.nonce_str = TenpayUtil.getNoncestr();
        order.body = body;
        order.out_trade_no = orderNumber;
        order.total_fee = Price;
        order.spbill_create_ip = Page.Request.UserHostAddress;
        order.notify_url = "Notify.aspx";
        order.trade_type = "JSAPI";
        if (ViewState["OpenID"] != null)
        {
            order.openid = ViewState["OpenID"].ToString();  //JSAPI必须传入openid
        }
        TenpayUtil tu = new TenpayUtil();
        PrepayId = tu.getPrepay_id(order, key);
        string package = "prepay_id=" + PrepayId;
        NonceStr = order.nonce_str;
        TimeStamp = TenpayUtil.getTimestamp();

        SortedDictionary<string, string> sParams = new SortedDictionary<string, string>();
        sParams.Add("appId", AppId);
        sParams.Add("nonceStr", NonceStr);
        sParams.Add("package", package);
        sParams.Add("signType", "MD5");
        sParams.Add("timeStamp", TimeStamp);
        Sign = tu.getsign(sParams, key);
        Json = "{\"code\":\"1\",\"data\":{\"appId\":\"" + AppId + "\",\"nonceStr\":\"" + NonceStr + "\",\"package\":\"" + package + "\",\"timeStamp\":\"" + TimeStamp + "\",\"signType\":\"MD5\",\"paySign\":\"" + Sign + "\"}}";

3、前端JS---:接收后台传过来的参数,如果正确无误就可以在微信中调起支付功能。

$.post("/Pay/PayApi.aspx", ret, function (result) {
        var result = JSON.parse(result); //后台获取到的参数
        if (result.code == 1) {
            WeixinJSBridge.invoke(‘getBrandWCPayRequest‘, result.data,
                            function (res) {
                                // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回    ok,但并不保证它绝对可靠。
                                switch (res.errMsg) {
                                case "get_brand_wcpay_request:ok":
                                    alert("支付成功");
                                    break;
                                case "get_brand_wcpay_request:cancel":
                                    alert("支付取消");
                                    break;
                                default:
                                    alert("支付失败");
                                    break;
                                }
                            }
                        );
        }
    }

大功告成!  祝君好运~

以上是关于WeChat-JSAPI支付的主要内容,如果未能解决你的问题,请参考以下文章

44. CSRF 攻击与防御

微信小程序代码片段

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板