原创
car_5

本章介绍微信JsApi支付方式,后面还会介绍到扫码支付、App支付。

微信支付的集成,让您节约很多时间,作者是经历了无数个“签名错误”“code error”的夜晚才成就了Dos.WeChat。

首先建立控制器方法:

using Dos.WeChat;
namespace UI.Controllers
{
    public class WeChatController : Controller
    {
        //创建jsapi支付需要的json参数
        public JsonResult CreateJSAPIPayJson()
        {
            var payParam = new PayParam()
            {
                    TotalFee = 2500,//总价,单位:分。2500即25元
                    OpenId = "",//支付用户的OpenId
                    OrderNumber = "订单编号",
                    ProductName ="商品名称",
                    //过期时间,必须按照此种格式
                    TimeExpire = DateTime.Now.AddMinutes(30).ToString("yyyyMMddHHmmss"),
                    //支付成功后回调地址,需要在这里面回写订单状态
                    NotifyUrl = "http://ITdos.com/WeChat/OrderNotify"
             };
             var json = PayUtil.CreateJSAPIPayJson(payParam);
             return Json(new BaseResult(true, json));
             //如果你是ActionResult,可以把此json输出到页面顶部,然后前端页面直接拿来使用。
             //ViewBag.PayParamJson = new HtmlString(json);
             //前端页面举例var payParam = @ViewBag.PayParamJson;
        }
        public string OrderNotify()
        {
            var result = PayUtil.Notify();         
            if (result.IsSuccess)
            {
                var dic = ((Dictionary<string, string>)result.Data);
                //订单Id:dic["OrderNumber"]
                //支付用户的OpenId:dic["WeChat"]
                //开始回写订单状态,剩下的靠你了
                
                //告诉微信我们已经处理成功,不需要再调用我们的接口了
                return "success";
            }
            //告诉微信我们处理失败,请继续调用我们的接口。好像是会重试8次。
            return "FAIL";
        }
    }
}

Js代码:

function WeChatPay(){
    $.post("WeChat/CreateJSAPIPayJson", { }, function (result) {
        if (result.IsSuccess) {
            try {
        	WeixinJSBridge.invoke('getBrandWCPayRequest', JSON.parse(result.Data), function (res) {
                        if (res.err_msg === "get_brand_wcpay_request:ok") {
        	              //支付成功,跳转至订单详情页面
                        } else {
        	              //支付取消或支付失败,错信息: JSON.stringify(res)
        	        }
        	    });
            } catch (e) {
                //支付凭据创建失败,错误信息: e.message
            }
        } else {
            //支付凭据创建失败,错误信息:result.Message
        }
    });
}

cshtml代码:

<input id="getBrandWCPayRequest" onclick="WeChatPay()" value="微信支付" type="button"/>

最后一步,别忘记配置微信支付授权目录:

blob.png

如你的支付页面地址为:http://www.itdos.com/WeChat/ParOrder

那么授权目录就为:http:://www.itdos.com/WeChat/