2019独角兽企业重金招聘Python工程师标准>>>

首先说明一点但凡平台开发接口开发都不会太难最主要的一点是看文档~看文档~看文档。
按照文档,第一步,预下单。
**推荐看文档**
[API列表统一下单](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1)

值得注意的是openid值的获取, 直接贴代码这里输入代码`

 /*** 微信统一下单* * @param fenpay* @param orderStr* @return*/private String placOrder(int fenpay, String orderStr, String subject) {Object openid = WebUtils.getSessionAttribute("openid");if (openid == null) {throw new ServiceException("没有获得微信授权,不能使用微信支付");}String url = "https://api.mch.weixin.qq.com/pay/unifiedorder";SortedMap<String, String> sm = new TreeMap<String, String>();// 添加三个固定的参数sm.put("appid", WeiXinUtil.APPID);sm.put("mch_id", WeiXinUtil.MCH_ID);sm.put("notify_url", WeiXinUtil.NOTIFY_URL);sm.put("trade_type", WeiXinUtil.TRADE_TYPE);sm.put("nonce_str", RandomStringGenerator.getRandomStringByLength(8));sm.put("body", subject);sm.put("out_trade_no", orderStr);sm.put("total_fee", String.valueOf(fenpay));sm.put("spbill_create_ip", "127.0.0.1");// 现在写死的// sm.put("openid", "oMEZLt3zK-GrAnkHRsHxKOaDONpM");//String openidStr = openid.toString();sm.put("openid", openidStr);getLogger().debug("opendid:" + openid);String sign = WeiXinUtil.createSign(sm);getLogger().debug("sign:" + sign);String xml = XmlUtil.createXml(sm, sign);getLogger().debug("post:" + xml);String result = HttpClientUtil.postXML(url, xml);getLogger().debug("result:" + result);Map<String, String> xmlmap = XmlUtil.parseXml(result);// 返回预支付标识String prepay_id = xmlmap.get("prepay_id");// 凡是拿不到prepay_id都统统归结为下单失败if (StringUtils.isEmpty(prepay_id)) {throw new ServiceException("微信下单失败");}return "prepay_id=" + prepay_id;}

我是通过授权跳转的方式获取openid,即在点击“去支付”按钮的时候跳转到微信平台进行自动授权然后跳转会指定页面,也可在系统登录的时候就进行授权跳转。贴代码注意加粗代码即可。还是推荐看文档 授权跳转 页面跳转授权

<a href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${payUrl2}&response_type=code&state=${user.uid}&scope=snsapi_base" class="paymentbtn">

redirect_uri为你要授权之后跳转回来的url

    /*** * 活动报名* * @return*/@SuppressWarnings("unchecked")public String payApply() {Map<String, Object> user = (Map<String, Object>) WebUtils.getSessionAttribute("user");
**      // 获得微信支付返回来的state,用来存储登录用户的uid这个时候重新从接口中String state = WebUtils.getParameter("state");**getLogger().info("获取授权之后的state" + state);if (user == null && StringUtils.isNotEmpty(state)) {Map<String, Object> map = new HashMap<String, Object>();map.put("uid", state);String userStr = HttpClientUtil.doGet("http://120.24.240.104/bikeapi/?m=user&a=get_user", map);user = (Map<String, Object>) JSON.parse(userStr);ActionContext.getContext().getSession().put("user", user);}if (getActivityId() == null) {return "activityerror";}Activity av = activityService.findById(getActivityId());setActivity(av);
**      // 获得用户的openid,支付的时候需要用到String code = WebUtils.getParameter("code");**// String code = "021ed6c6c2f9b4689e166d7d0ea9caaD";if (StringUtils.isEmpty(code)) {// 不能获得支付授权setMsg("获得微信支付授权失败,不能使用微信支付");} else {
**          // ------------一下为获取openid的代码String url = "https://api.weixin.qq.com/sns/oauth2/access_token";Map<String, Object> map = new HashMap<String, Object>();map.put("appid", WeiXinUtil.APPID);map.put("secret", WeiXinUtil.APPSECRET);map.put("code", code);map.put("grant_type", "authorization_code");try {// 授权字符串String authStr = HttpClientUtil.doPost(url, map);JSONObject json = new JSONObject(authStr);String openid = json.getString("openid");// 把他set到session中,这应该是最简单的了吧WebUtils.getSession().setAttribute("openid", openid);**} catch (Exception e) {e.printStackTrace();setMsg("获得微信支付授权失败,不能使用微信支付");}}// 没有登录不能报名if (user != null) {// 查询当前用户的余额,如果查不到那么就是0元咯BigDecimal balance = userService.findBalanceByUid(Long.valueOf(user.get("uid").toString()));this.setUserBalance(balance);return "payapply";} else {fromUrl = "/index/index!login.action?from_url=/activity/activity!apply.action?id="+ String.valueOf(getActivityId());return "login";}}

好的,完成了统一下单之后你应该获取到一个package格式为prepay_id=123456789这样子的订单信息,那么接下来就可以在页面发起支付请求了。 刚开始的时候我按照文档的发起H5支付,结果怎么调试都不成功,相信很多朋友也是在这个地方遇到问题 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7 这个应该是官方文档没更新的原因,新版的微信中已经支持这种发起支付调用,而应该采用JSSDK发起支付请求。直接看到支付的api 输入链接说明 遇到不懂的地方或者缺少的参数请往上看文档。 主要具体步骤有

最后贴一下我的发起支付的页面代码,我只能帮你们到这里了,剩下的就是调试了。

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="/common/header.jsp" %>
<title>微信支付</title>
<link rel="stylesheet" type="text/css" href="css/activity.css">
<script type="text/javascript" charset="UTF-8" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript">function pay(){var appId = $('#appId').val();var timeStamp = $('#timeStamp').val();var nonceStr = $('#nonceStr').val();var pk = $('#package').val();var signType = $('#signType').val();var paySign = $('#paySign').val();//configvar timeStamp2 = $('#timeStamp2').val();var nonceStr2 = $('#nonceStr2').val();var signature = $('#signature').val();//var activityId = $('#activityId').val();wx.config({debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。appId: appId, // 必填,公众号的唯一标识timestamp:timeStamp2 , // 必填,生成签名的时间戳nonceStr: nonceStr2, // 必填,生成签名的随机串signature: signature,// 必填,签名,见附录1jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2});wx.ready(function(){// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。wx.chooseWXPay({timestamp: timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符nonceStr: nonceStr, // 支付签名随机串,不长于 32 位package: pk, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)signType: signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'paySign: paySign, // 支付签名complete: function (res) {// 支付成功后的回调函数location.href=basePath+'/activityorder/activity-order!list.action?activityId='+activityId;}});});
}
</script>
</head>
<body onload="pay()"><input id="activityId" type="hidden" value="${activityId}" /><input id="appId" type="hidden" value="${payparam.appId}" /><input id="timeStamp" type="hidden" value="${payparam.timeStamp}" /><input id="nonceStr" type="hidden" value="${payparam.nonceStr}" /><input id="package" type="hidden" value="${payparam.package1}" /><input id="signType" type="hidden" value="${payparam.signType}" /><input id="paySign" type="hidden" value="${payparam.paySign}" /><input id="timeStamp2" type="hidden" value="${apijsmap.timestamp}" /><input id="nonceStr2" type="hidden" value="${apijsmap.noncestr}" /><input id="signature" type="hidden" value="${apijsmap.signature}" />
</body>
</html>

最后记得在公众平台的公众权限配置,你发起支付的页面一定要是在公众平台设置了授权的页面,调用jsjdk的页面也要授权了的。至于具体要哪些授权,地方太多了慢慢找吧。

转载于:https://my.oschina.net/u/566297/blog/512675

微信公众平台H5支付相关推荐

  1. php h5微信公众号支付接口,微信公众号H5支付接口调用方法

    本文实例为大家分享了 微信内h5调用支付接口的具体代码,供大家参考,具体内容如下 官方文档 微信公众号h5接口调用 // 判断微信版本是否在5.0以上 // window.navigator.user ...

  2. 微信公众号H5支付遇到的那些坑

    简史 官方文档说的很清楚,商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程. 当然,最近微信支付平台也加入了纯H5支付,也就是说用户可以在微信以外的 ...

  3. uni-app微信公众号H5支付页面

    准备工作 初始化公众平台测试账号系统. 地址: https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 登录后,会得到一个测试公众 ...

  4. PHP实现微信公众号H5支付

    开发前配置 进行代码接入前,需在微信后台填写授权回调域名,此域名必须经过ICP备案 开发主要流程 用户下单时选择微信支付 商户进行业务逻辑处理并调用微信统一下单接口,微信H5交易类型为:trade_t ...

  5. 微信公众号h5支付完后无返回值,整个h5页面被关闭

    最近做个挂在公众号下的h5项目,刚开始的微信支付,整个流程没什么问题,支付完后回调也没问题,但后面客户要求支付走第三方的东西,收到的钱什么的由第三方接管,就遇到问题了,支付完后,点完成,整个h5都被关 ...

  6. react 微信公众平台实现支付功能

    注意点 1.window.WeixinJSBridge.invoke 在编辑器里面是会报错的,请无视,要在微信上才能测试 2.支付成功后注意this指向 index.html <script s ...

  7. 微信公众平台无法使用支付宝收付款的解决方案

    微信中无法打开支付宝收款是微信浏览器限制所致,可以参考下图方法引导用户转到系统浏览器,即可用支付宝收款.点此下载. 1.引导用户选择在浏览器中打开支付链接,以完成支付.如图1所示: 图1 2.用支付宝 ...

  8. java微信公众号支付开发平台_Java微信公众平台开发之公众号支付(微信内H5调起支付)...

    官方文档 准备工作:已通过微信认证的公众号,必须通过ICP备案域名(否则会报支付失败) 借鉴了很多大神的文章,在此先谢过了 整个支付流程,看懂就很好写了 一.设置支付目录 在微信公众平台设置您的公众号 ...

  9. 微信公众平台开发(四)——微信支付

    一.JS-SDK 公众号中的微信支付需要通过JS来实现.微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包.点击查看在线文档. 1)引入JS脚本文件 <script s ...

  10. 微信公众平台开发[5] —— 微信扫码支付介绍

    背景:因为微信占据众多的用户群,作为程序开发,自然而然也成了研究的重点.毕竟个人能力有限,很难想象设计的复杂性,多数时间接触起来,各种蒙圈,在此笔记自己的操作流程,仅做参考,欢迎指正. 一.微信扫码支 ...

最新文章

  1. FPGA设计心得(4)Aurora IP core 的定制详情记录
  2. 使用VMware新建Ubuntu虚拟机
  3. vue从入门到精通之进阶篇(二)组件通信:兄弟组件通信
  4. 201671030130+词频统计软件项目报告
  5. C#的变迁史08 - C# 5.0 之并行编程总结篇
  6. bzoj2285 [SDOI2011]保密 分数规划spfa+最小割
  7. mybatis调用oracle存储过程例子.
  8. ipv6 ripng配置
  9. Ubuntu 中如何使用 PPA 安装应用程序
  10. ZOJ 3880 Demacia of the Ancients
  11. css轮播箭头怎么隐藏,css实现带箭头和圆点的轮播
  12. Java的图片处理工具类(放缩、切割、水印等)
  13. 中国计算机学会推荐国内期刊目录
  14. Kotlin中问号 ? 和两个叹号 !! 的含义
  15. Stop worrying and start living
  16. c#操作word图表(二)
  17. css信号图标,css3实现wifi信号形状
  18. javawe(ckeditorsmartupload)
  19. java愤怒的小鸟代码_java 愤怒的小鸟(flybird)源码
  20. 分布式中间件──断路器

热门文章

  1. 未安装任何音频设备解决方案(2021/12/27)
  2. 计算机面试 OA 试题及答案,办公自动化题库OA(附答案)
  3. 硬盘整数分区计算方法(精确硬盘分区算法)
  4. CentOS7.0+phpwind9.0.1环境搭建
  5. 在Access数据库中使用SQL查询分析器
  6. 漫剪AE插件丨一键分屏VE Super Grid插件
  7. 介绍几款WAP网页制作工具
  8. 计算机视觉论文-2021-09-14
  9. csrss.exe病毒查杀
  10. 语法分析:自上而下分析