微信小程序支付之c#后台实现方法


Posted in Javascript onOctober 19, 2017

微信小程序支付c#后台实现

今天为大家带来比较简单的支付后台处理

首先下载官方的c#模板(WxPayAPI),将模板(WxPayAPI)添加到服务器上,然后在WxPayAPI项目目录中添加两个“一般处理程序” (改名为GetOpenid.ashx、pay.ashx)

之后打开business目录下的JsApiPay.cs,在JsApiPay.cs中修改如下两处

微信小程序支付之c#后台实现方法

然后在GetOpenid.ashx中加入代码如下:

public class GetOpenid : IHttpHandler 
  { 
    public string openid { get; set; } 
 
    public void ProcessRequest(HttpContext context) 
    { 
       
      string code = HttpContext.Current.Request.QueryString["code"]; 
      WxPayData data = new WxPayData(); 
      data.SetValue("appid", WxPayConfig.APPID); 
      data.SetValue("secret", WxPayConfig.APPSECRET); 
      data.SetValue("code", code); 
      data.SetValue("grant_type", "authorization_code"); 
      string url = "https://api.weixin.qq.com/sns/oauth2/access_token?" + data.ToUrl(); 
 
      //请求url以获取数据 
      string result = HttpService.Get(url); 
 
      Log.Debug(this.GetType().ToString(), "GetOpenidAndAccessTokenFromCode response : " + result); 
 
      //保存access_token,用于收货地址获取 
      JsonData jd = JsonMapper.ToObject(result); 
      //access_token = (string)jd["access_token"]; 
 
      //获取用户openid 
      openid = (string)jd["openid"]; 
      context.Response.Write(openid);//获取H5调起JS API参数 
      
    }

在pay.ashx中加入代码如下:

public class pay : IHttpHandler 
  { 
    
    public void ProcessRequest(HttpContext context) 
    {        
      context.Response.ContentType = "text/plain"; 
      
      string openid = HttpContext.Current.Request.QueryString["openid"]; 
      string total_fee = HttpContext.Current.Request.QueryString["total_fee"]; 
      JsApiPay jsApiPay = new JsApiPay(context); 
      jsApiPay.openid = openid; 
      jsApiPay.total_fee = int.Parse(total_fee); 
      WxPayData unifiedOrderResult = jsApiPay.GetUnifiedOrderResult(); 
      context.Response.Write(jsApiPay.GetJsApiParameters());//获取H5调起JS API参数 
    }

 然后发布就可以了(记得将相关的信息appid等填好)

 微信小程序的代码如下:

wxpay: function () { 
  var that = this 
  //登陆获取code 
  wx.login({ 
   success: function (res) { 
    console.log(res.code) 
    //获取openid 
    that.getOpenId(res.code) 
   } 
  }); 
 }, 
 getOpenId: function (code) { 
//获取openID 
   
  var that = this; 
  wx.request({ 
   url: 'http://*******/WxPayAPI/GetOpenid.ashx?code='+ code , //改为自己的域名
   data: {}, 
  // method: 'GET', 
   success: function (res) { 
   var a12=res.data 
   that.generateOrder(a12) 
   //console.log(a12) 
   }, 
   fail: function () { 
    // fail 
   }, 
   complete: function () { 
    // complete 
   } 
  }) 
 }, 
/**生成商户订单 */ 
 generateOrder: function (openid) { 
  var that = this; 
  //console.log(openid) 
  //统一支付 
  wx.request({ 
   url: 'http://*******/WxPayAPI/pay.ashx', //改为自己的域名
   //method: 'GET', 
   data: { 
    total_fee: 1,//1分 
    openid: openid, 
   }, 
   header: { 
    'content-type': 'application/json' 
   }, 
  
   success: function (res) { 
  
    var pay = res.data 
    //发起支付 
      
    var timeStamp = pay.timeStamp; 
    var packages = pay.package; 
    var paySign = pay.paySign; 
    var nonceStr = pay.nonceStr; 
    var param = { "timeStamp": timeStamp, "package": packages, "paySign": paySign, "signType": "MD5", "nonceStr": nonceStr }; 
     
    that.pay(param) 
   }, 
  }) 
 }, 
  
 /* 支付  */ 
 pay: function (param) { 
  
  wx.requestPayment({ 
   timeStamp: param.timeStamp, 
   nonceStr: param.nonceStr, 
   package: param.package, 
   signType: param.signType, 
   paySign: param.paySign, 
   success: function (res) { 
    // success 
     
    wx.navigateBack({ 
     delta: 1, // 回退前 delta(默认为1) 页面 
     success: function (res1) { 
      wx.showToast({ 
       title: '支付成功', 
       icon: 'success', 
       duration: 2000 
      }); 
       
     }, 
     fail: function () { 
      // fail 
        
     }, 
     complete: function () { 
        
     } 
    }) 
   }, 
   fail: function (res) { 
    // fail 
   }, 
   complete: function () { 
    // complete 
   } 
  }) 
 },

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
JavaScript中获取未知对象属性的代码
Apr 27 Javascript
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
Jan 15 Javascript
jQuery中的$.ajax()方法应用
May 06 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
Jun 07 Javascript
自定义百度分享的分享按钮
Mar 18 Javascript
javascript实现label标签跳出循环操作
Mar 06 Javascript
EasyUI 结合JS导出Excel文件的实现方法
Nov 10 Javascript
ES6学习教程之块级作用域详解
Oct 09 Javascript
JS运动特效之链式运动分析
Jan 24 Javascript
使用proxy实现一个更优雅的vue【推荐】
Jun 19 Javascript
vue-router 实现导航守卫(路由卫士)的实例代码
Sep 02 Javascript
vue3种table表格选项个数的控制方法
Apr 14 Vue.js
JS实现点击链接切换显示隐藏内容的方法
Oct 19 #Javascript
bootstrap日期插件daterangepicker使用详解
Oct 19 #Javascript
微信小程序的生命周期的详解
Oct 19 #Javascript
python爬取安居客二手房网站数据(实例讲解)
Oct 19 #Javascript
js 两个日期比较相差多少天的实例
Oct 19 #Javascript
Angular弹出模态框的两种方式
Oct 19 #Javascript
vue使用axios跨域请求数据问题详解
Oct 18 #Javascript
You might like
php面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
PHP strtok()函数的优点分析
2010/03/02 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
yii框架搜索分页modle写法
2016/12/19 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
jquery 操作css样式、位置、尺寸方法汇总
2014/11/28 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
js中new一个对象的过程
2017/02/20 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
js中split()方法得到的数组长度问题
2018/07/19 Javascript
jQuery轮播图实例详解
2018/08/15 jQuery
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
iview form清除校验状态的实现
2019/09/19 Javascript
解决VUE-Router 同一页面第二次进入不刷新的问题
2020/07/22 Javascript
简单了解Python下用于监视文件系统的pyinotify包
2015/11/13 Python
Python中列表元素转为数字的方法分析
2016/06/14 Python
Python中取整的几种方法小结
2017/01/06 Python
基于Pandas读取csv文件Error的总结
2018/06/15 Python
详解Python 装饰器执行顺序迷思
2018/08/08 Python
Python中面向对象你应该知道的一下知识
2019/07/10 Python
flask框架自定义url转换器操作详解
2020/01/25 Python
使用keras实现孪生网络中的权值共享教程
2020/06/11 Python
python导入库的具体方法
2020/06/18 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
ECHT官方网站:男女健身服
2020/02/14 全球购物
平民服装店创业计划书
2014/01/17 职场文书
社区平安建设方案
2014/05/25 职场文书
社会稳定风险评估方案
2014/06/02 职场文书
2015年社区工会工作总结
2015/05/26 职场文书
一文读懂go中semaphore(信号量)源码
2021/04/03 Golang
vue项目两种方式实现竖向表格的思路分析
2021/04/28 Vue.js
Vue.Draggable实现交换位置
2022/04/07 Vue.js