asp.net微信支付发起页面jsapi.aspx

jsapi.aspx

后台核心代码

 //创建支付应答对象
            RequestHandler packageReqHandler = new RequestHandler(Context);
            //初始化
            packageReqHandler.init();
            packageReqHandler.setKey(TenpayUtil.key);

            //设置package订单参数
            packageReqHandler.setParameter("partner", TenpayUtil.partner);          //商户号
            packageReqHandler.setParameter("bank_type", "WX");
            packageReqHandler.setParameter("fee_type", "1");                    //币种,1人民币
            packageReqHandler.setParameter("input_charset", "UTF-8");
            packageReqHandler.setParameter("out_trade_no", model.order_id);        //商家订单号
            packageReqHandler.setParameter("total_fee", (model.order_money * 100).ToString("f0"));                    //商品金额,以分为单位(money * 100).ToString()
            packageReqHandler.setParameter("notify_url", TenpayUtil.tenpay_notify);            //接收财付通通知的URL            
            packageReqHandler.setParameter("body", model.description.Replace(" ", ""));                        //商品描述    

            packageReqHandler.setParameter("spbill_create_ip", Page.Request.UserHostAddress);   //用户的公网ip,不是商户服务器IP

            //获取package包
            packageValue = packageReqHandler.getRequestURL();

            //调起微信支付签名
            timeStamp = TenpayUtil.getTimestamp();
            nonceStr = TenpayUtil.getNoncestr();

            //设置支付参数
            RequestHandler paySignReqHandler = new RequestHandler(Context);
            paySignReqHandler.setParameter("appid", appId);
            paySignReqHandler.setParameter("appkey", TenpayUtil.appkey);
            paySignReqHandler.setParameter("noncestr", nonceStr);
            paySignReqHandler.setParameter("timestamp", timeStamp);
            paySignReqHandler.setParameter("package", packageValue);
            paySign = paySignReqHandler.createSHA1Sign();


            string sign = PayOrderCommon.OrderHelper.CreateSign(payNo);

            successUrl = string.Format("{0}?sign={1}&payNo={2}", "payresult.ashx", sign, payNo);

前台页面

<script language="javascript" type="text/javascript">
        function auto_remove(img) {
            div = img.parentNode.parentNode; div.parentNode.removeChild(div);
            img.onerror = "";
            return true;
        }

        function changefont(fontsize) {
            if (fontsize < 1 || fontsize > 4) return;
            $('#content').removeClass().addClass('fontSize' + fontsize);
        }

        // 当微信内置浏览器完成内部初始化后会触发WeixinJSBridgeReady事件。
        document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {
            //公众号支付
            WeixinJSBridge.invoke('getBrandWCPayRequest', {
                "appId": "<%= appId %>", //公众号名称,由商户传入
                "timeStamp": "<%= timeStamp %>", //时间戳
                "nonceStr": "<%= nonceStr %>", //随机串
                "package": "<%= packageValue %>", //扩展包
                "signType": "SHA1", //微信签名方式:1.sha1
                "paySign": "<%= paySign %>" //微信签名
            }, function (res) {
                if (res.err_msg == "get_brand_wcpay_request:ok") {
                    location.href = "<%=successUrl %>";
                }
                // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
                //因此微信团队建议,当收到ok返回时,向商户后台询问是否收到交易成功的通知,若收到通知,前端展示交易成功的界面;若此时未收到通知,商户后台主动调用查询订单接口,查询订单的当前状态,并反馈给前端展示相应的界面。
            });


            WeixinJSBridge.log('yo~ ready.');

        }, false)
    </script>