zoukankan      html  css  js  c++  java
  • 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         }
  • 相关阅读:
    网络负载均衡LVS
    JS 模仿红绿灯(控制台)
    【转】wrk 压力测试的 lua脚本
    linux开机 自动挂载和启动jar包
    【转】jprofiler linux配置需要监听的程序的端口
    时间复杂度总结
    Windows Subsystem for Linux (WSL) 安装
    敬畏用户
    Golang语言HTTP客户端实践
    Groovy入门常用语法
  • 原文地址:https://www.cnblogs.com/longshanshan/p/9996583.html
Copyright © 2011-2022 走看看