前面说过微信支付的APP支付,这篇说说JSAPI的支付。

JSAPI支付只能在微信浏览器里面使用,主要用于公众号里面的H5应用的支付。

开发前的准备

微信公众平台:https://mp.weixin.qq.com/cgi-bin/loginpage?t=wxm2-login&lang=zh_CN

微信商户平台:https://pay.weixin.qq.com/index.php/home/login

开发文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6

公众号支付开发步骤

1、设置测试目录

在微信公众平台设置,栏目见图7.7。支付测试状态下,设置测试目录,测试人的微信号添加到白名单,发起支付的页面目录必须与设置的精确匹配。并将支付链接发到对应的公众号会话窗口中才能正常发起支付测试。注意正式目录一定不能与测试目录设置成一样,否则支付会出错。

图7.7 微信内网页支付设置栏目入口

2、设置正式支付目录

根据图中栏目顺序进入修改栏目,勾选JSAPI网页支付开通该权限,并配置好支付授权目录,该目录必须是发起支付的页面的精确目录,子目录下无法正常调用支付。具体界面如图7.8所示:

图7.8 微信网页内支付接口授权目录设置

再到开发》接口权限》网页服务》网页账号,填上你的网址。如下图:

商户平台有两个账号,一个是用于APP支付的,一个是用于公众号支付的,这里我们需要用公众号的那个。

商户平台有两个东西会用到,一个是Partner ID,就是微信支付商户号;一个是Key,就是对商户平台的登录密码进行MD5加密后得到的字串,到API安全>>API密钥>>设置密钥,把这个MD5字串填进去保存就行了,如下图:

1.生成openid

            JsApiPay jsApiPay = new JsApiPay(this);//调用【网页授权获取用户信息】接口获取用户的openid和access_tokenjsApiPay.GetOpenidAndAccessToken();ViewState["OpenID"] = jsApiPay.openid;

2.发起支付

前台JS代码:

               <script type="text/javascript">var appId = '<%=appId%>';var prepayId = '<%=prepayId%>';var nonceStr = '<%=nonceStr%>';var timeStamp = '<%=timeStamp%>';var sign = '<%=sign%>';function onBridgeReady() {WeixinJSBridge.invoke('getBrandWCPayRequest', {"appId": appId,     //公众号名称,由商户传入     "timeStamp": timeStamp,         //时间戳,自1970年以来的秒数     "nonceStr": nonceStr, //随机串     "package": "prepay_id=" + prepayId,"signType" : "MD5",         //微信签名方式:     "paySign": sign //微信签名 },function (res) {// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回    ok,但并不保证它绝对可靠。switch (res.err_msg){case "get_brand_wcpay_request:ok":alert("支付成功");break;case "get_brand_wcpay_request:cancel":alert("支付取消");break;default:alert("支付失败");break;}}); }if (typeof WeixinJSBridge == "undefined"){if( document.addEventListener ){document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);}else if (document.attachEvent){document.attachEvent('WeixinJSBridgeReady', onBridgeReady); document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);}}else{onBridgeReady();}</script>

后台CS代码:

 protected void Page_Load(object sender, EventArgs e){if (Request.QueryString["openid"] != null){ViewState["OpenID"] = Request.QueryString["openid"];WxPay();}else{Response.Redirect("WxPay.aspx");}}protected void btnPay_Click(object sender, EventArgs e){WxPay();}public string appId;public string prepayId;public string nonceStr;public string timeStamp;public string sign;/// <summary>/// 支付方法/// </summary>private void WxPay(){appId = WxPayConfig.APPID;string partnerId = WxPayConfig.MCHID;string key = WxPayConfig.KEY;string body = txtProductName.Text.Trim();string orderNumber = DateTime.Now.ToString("yyyyMMddHHmmss");int price = int.Parse(txtPrict.Text.Trim());UnifiedOrder order = new UnifiedOrder();order.appid = appId;order.mch_id = partnerId;order.nonce_str = TenpayUtil.getNoncestr();order.body = body;order.out_trade_no = orderNumber;order.total_fee = price;    //单位是分order.spbill_create_ip = Page.Request.UserHostAddress;order.notify_url = "http://www.yourdomain.com/notify.aspx";order.trade_type = "JSAPI";if (ViewState["OpenID"] != null){order.openid = ViewState["OpenID"].ToString();  //JSAPI必须传入openid}TenpayUtil tu = new TenpayUtil();prepayId = tu.getPrepay_id(order, key);nonceStr = order.nonce_str;timeStamp = TenpayUtil.getTimestamp();SortedDictionary<string, string> sParams = new SortedDictionary<string, string>();sParams.Add("appId", appId);sParams.Add("nonceStr", nonceStr);sParams.Add("package", "prepay_id=" + prepayId);sParams.Add("signType", "MD5");sParams.Add("timeStamp", timeStamp);sign = tu.getsign(sParams, key);}

这里要注意的是appId、nonceStr这些字段要大小写正确,否则加密会出错导致支付失败。

3.查询订单状态

这个可以参考前面APP支付

4.后台设置

源码下载:http://pan.baidu.com/s/1jHp1s3c

C# 微信支付之JSAPI支付相关推荐

  1. JAVA开发微信支付(JSAPI支付)

    最近开发完了微信支付功能模块,下面就趁热打铁整理下微信支付(JSAPI支付)相关的知识. 1.JSAPI支付 JSAPI支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSA ...

  2. java微信公众号JSAPI支付以及所遇到的坑

    java微信公众号JSAPI支付以及所遇到的坑 上周做了个支付宝微信扫码支付,今天总结一下.微信相比支付宝要麻烦许多 由于涉及到代理商,没办法,让我写个详细的申请流程,懵逼啊. 笔记地址 http:/ ...

  3. 微信小程序微信支付《JSAPI支付》APIV3详细教程

    文章目录 前提 整体介绍 我的maven依赖 1.整体流程 2.openid 的获取 3.统一下单Controller(预支付订单) 4.配置类和配置文件 5.工具类 6.前端接收到必要的参数,进行调 ...

  4. Java接入微信native、jsapi支付

    Java接入微信native.jsapi支付 一.说明 本文示例使用的微信支付版本为V2版本,是旧版本,旧版本与新版本的接口不一,并不通用. 微信官方接口文档地址:https://pay.weixin ...

  5. 微信公众号支付(JSAPI支付)

    微信公众号支付(JSAPI支付) 微信浏览器会内置 WeixinJSBridge 对象,但是其可能需要加载时间,可以通过文档代码 if (typeof WeixinJSBridge == " ...

  6. 微信支付之JSAPI支付

    首先看一下,微信支付关于jsapi的官方文档,相关接口,一共有下单,查询订单,关闭订单,调起jsapi支付,支付结果通知,申请退款,查询单笔退款,退款结果通知,申请交易账单,申请资金账单以及下载账单接 ...

  7. JAVA版微信支付V3—JSAPI支付

    本人用的开发框架是:struts2(用了struts2的0配置,对于struts的0配置不熟悉的可以看看这个博客了解下 http://www.cnblogs.com/fpjason/archive/2 ...

  8. 微信支付之Native支付和JSAPI支付详细开发步骤!

    目录标题 微信支付之扫码Native支付与JSAPI支付 进入主题 一.Native支付 1. 使用场景 2. 开发步骤 3. 开始开发 二.JSAPI支付 1. 使用场景 2. 开发步骤 3. 开始 ...

  9. 微信小程序JSAPI支付和微信APP支付二次签名

    如果之前开发过微信的东西,你能看明白微信官方提供的文档,其实实现这两个功能真的并不难! 难就难在,明明已经按照官方提供的文档写好程序,为什么就会提示这样那样的错误呢? 百度了一下,很多人都说这是微信官 ...

最新文章

  1. 视频插值--Video Frame Interpolation via Adaptive Separable Convolution
  2. apply筛选 pandas_Pandas中第二好用的函数 | 优雅的apply
  3. 一文读懂 K8s 持久化存储流程
  4. HDU4273(求三维凸包重心到表面的最短距离)
  5. authconfig命令解析_学习笔记
  6. Erwin 生成 mysql 带注释(comment )的脚本
  7. 交大计算机学硕往年录取情况,上海交通大学2020年考研报录情况汇总及分析
  8. 一个电脑安装多个系统的几个办法
  9. 系统优化的方法有哪些
  10. 控制系统数字仿真-基于MATLAB实现四阶龙格库塔法
  11. It was either not specified and/or could not be found for the javaType (java.util.List) : jdbcType
  12. mapgis明码文件转为点线面文件_MapGIS明码文件的获得和在坐标转化中的应用研究(2)...
  13. 设计一个排序和查找系统。能够实现对给定的一组学生的借书证信息(如:卡号、姓名、系别、班号等)进行排序和查找。
  14. 微信小程序polyline
  15. Java编程思想读书笔记一:并发
  16. 原型链上的__proto__和protoptype
  17. 流量排名100W网站
  18. 【HTML】表格标签,map,iframe,h5标签,语义化,标签分类,role,aria-*
  19. 大数据信息资料采集:视频信息采集及评论内容爬取八爪鱼采集规则
  20. 根据经纬度确定行政区域_使用高德地图api导入行政区域及经纬度

热门文章

  1. BP神经网络的Java实现
  2. .h和.c文件的区别到底是什么(精确讲解)
  3. oracle 用户的登录,授权,传递授权操作
  4. 百度AI接入api使用流程
  5. Java高级开发必备--Docker进阶(一篇详细教程,进阶Docker)
  6. nodejs的http请求是报错 socket hang up
  7. 委托实现信用卡用户定时还款功能
  8. RTMP摄像机无法成功推流到EasyDSS是什么原因?如何解决?
  9. Centos7x Oracle 11G的rac部署(无图形化安装)
  10. 容器化Docker原理和场景