C# 微信支付之公众号支付

第一次接触微信支付这块, 把微信支付的sdk研究了很久,也 在网上找了很多的资料   记录一下  防止哪天忘记。

微信支付步骤:

1,获取code

2,获取access_token 和用户openID

3,查询订单详情

4,初始化微信支付环境

6,提交充值数据

5,调统一下单接口 ,获得后续相关接口的入口参数

6,完成支付

(一)、获取code ,access_token 和用户openID  在支付接口上都可以直接使用。 所以不做介绍了  , 直接到第四步。

 (二)、放上支付核心的代码 及js  (这里也是用的支付接口 但是根据需要做了修改)

 1   //初始化微信支付环境
 2         function fCharge() {
 4             if (typeof WeixinJSBridge == "undefined") {
 5                 if (document.addEventListener) {
 6                     document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
 7                 } else if (document.attachEvent) {
 8                     document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
 9                     document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
10                 }
11             } else {
12                 fPostCharge();
13             }
14         }
 1 //提交充值数据
 2         function fPostCharge() {
 3             var total_fee = $("#total_fee").val();
 4             total_fee = parseInt(total_fee)*100;
 5             if (total_fee > 0) {
 6                 $.messager.progress({
 7                     title: "",
 8                     msg: "正在调用微信支付接口,请稍后..."
 9                 });
10                 $.ajax({
11                     type: "post",
12                     data: {total_fee:total_fee,projectID:@Model.ID},
13                     url: "@Url.Action("JSAPIPay", "WeChat")",
14                     success: function (json) {
15                         if(json.message == false){
16                           location.href="@Url.Action("Error", "WeChat")";
17                          }else{
18         $.messager.progress('close');//记得关闭
19                         
20                         onBridgeReady(json.objResult);
21         }
23                     },
24                     error: function () {
25                         $.messager.progress('close');//记得关闭
26                         $.messager.alert("提示", '调用微信支付模块失败,请稍后再试。', 'info')
27                     }
28                 })
29             }
30             else {
31                 alert("金额不可以为空或者为负数,请确认后再试.")
32             }
33         }

后台接收

 1  public ActionResult JSAPIPay(string total_fee, int projectID)
 2         {
 3             object objResult = "";
 4             //JSAPI支付预处理
 5             try
 6             {
 7                 if (Session["openid"] != null) {15                     //若传递了相关参数,则调统一下单接口,获得后续相关接口的入口参数
16                     var project = REAS_BLL.bll_Project.GetByID(projectID);
17 
18                     JsApiPay jsApiPay = new JsApiPay();
19                     jsApiPay.openid = Session["openid"].ToString();
20                     jsApiPay.total_fee = Convert.ToInt32(total_fee);
21                     jsApiPay.product_id = project.ID;
22                     jsApiPay.body = project.Name + "(" + project.ReportNo + ")";
23 
24                     WxPayData unifiedOrderResult = jsApiPay.GetUnifiedOrderResult();
25                     WxPayData wxJsApiParam = jsApiPay.GetJsApiParameters();//获取H5调起JS API参数
26 
27                     ModelForOrder aOrder = new ModelForOrder()
28                     {
29                         appId = wxJsApiParam.GetValue("appId").ToString(),
30                         nonceStr = wxJsApiParam.GetValue("nonceStr").ToString(),
31                         packageValue = wxJsApiParam.GetValue("package").ToString(),
32                         paySign = wxJsApiParam.GetValue("paySign").ToString(),
33                         timeStamp = wxJsApiParam.GetValue("timeStamp").ToString(),
34                         msg = "成功下单,正在接入微信支付."
35                     };
36                     objResult = aOrder;
37 } 39 } 40 catch (Exception ex) 41 { 42 ModelForOrder aOrder = new ModelForOrder() 43 { 44 appId = "", 45 nonceStr = "", 46 packageValue = "", 47 paySign = "", 48 timeStamp = "", 49 msg = "下单失败,请重试,多次失败,请联系管理员." 50 }; 51 objResult = aOrder; 52 Log.Error(this.GetType().ToString(), ex.Message.ToString()); 53 } 54 return Json(new { Success= true, objResult }, JsonRequestBehavior.AllowGet); 55 }

 1  //调用微信支付模块
 2         function onBridgeReady(json) {
 3             WeixinJSBridge.invoke(
 4            'getBrandWCPayRequest', {
 5                "appId": json.appId,     //公众号名称,由商户传入
 6                "timeStamp": json.timeStamp,         //时间戳,自1970年以来的秒数
 7                "nonceStr": json.nonceStr, //随机串
 8                "package": json.packageValue,
 9                "signType": "MD5",         //微信签名方式:
10                "paySign": json.paySign //微信签名
11            },
12            function (res) {
13                if (res.err_msg == "get_brand_wcpay_request:ok") {
16             var total_fee = $("#total_fee").val();
17             total_fee = parseInt(total_fee);
18         window.location.href = "@Url.Action("ProductPage", "WeChat")?total_fee="+total_fee+"&projectId="+@Model.ID;
19                    fAlreadyPay();
20                }     // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回    ok,但并不保证它绝对可靠。
21            }
22             );
23         }

 

posted @ 2018-11-21 17:47  .Alive  阅读(2096)  评论(0编辑  收藏  举报