1.支付参数准备(图就不上了)

公众号的APPID、商户号MchID、商户API支付秘钥(商户平台的账户中心下:需要用户自行下载证书及安装)。

2.平台配置

商户平台-->产品中心-->开发配置-->支付配置-->公众号支付:支付授权目录(该路径需要通过备案)

点击添加

公众号配置:参见官方支付文档
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3

注意:以上的授权网址必须通过备案,最好开头都是统一的。比如:http://www.xxx.com/

3.参数配置

官方文档写的很详细了https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1

需要的参数

/** * 支付 * appid            应用ID      是   String(32)  wxd678efh567hg6787                      微信开放平台审核通过的应用APPID * mch_id           商户号          是   String(32)  1230000109                              微信支付分配的商户号 * nonce_str        随机字符串   是   String(32)  5K8264ILTKCH16CQ2502SI8ZNMTM67VS        随机字符串,不长于32位。推荐随机数生成算法 * sign             签名             是   String(32)  C380BEC2BFD727A4B6845133519F3AD6        签名,详见签名生成算法 * body             商品描述      是   String(128) 腾讯充值中心-QQ会员充值                       商品描述交易字段格式根据不同的应用场景按照以下格式:APP——需传入应用市场上的APP名字-实际商品名称,天天爱消除-游戏充值。 * out_trade_no     商户订单号   是   String(32)  20150806125346                          商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。详见商户订单号 * total_fee        总金额          是   Int         888                                     订单总金额,单位为分,详见支付金额 * spbill_create_ip 终端IP     是   String(16)  123.12.12.123                           用户端实际ip * notify_url       通知地址     是   String(256) http://www.weixin.qq.com/wxpay/pay.php  接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。 * openid           用户标识String(128)  是  oUpF8uMuAJO_M2pxb1Q9zNjWeS6o    * trade_type=JSAPI时(即公众号支付),此参数必传,此参数为微信用户在商户对应appid下的唯一标识。openid如何获取,可参考【获取openid】。企业号请使用【企业号OAuth2.0接口】获取企业号内成员userid,再调用【企业号userid转openid接口】进行转换 * @throws Exception  */  

获取openId的可以去我的另一篇博客:静默式获取 https://blog.csdn.net/qq_38423105/article/details/80632397

这边有个细节就是签名要最后签,把其余参数都带上,代码如下:

Map<String, String> data = new HashMap<String, String>();
data.put("appid", config.getAppID());                //公众号APPID
data.put("mch_id", config.getMchID());               //商户号
data.put("nonce_str", WXPayUtil.generateNonceStr()); //随机字符串
data.put("out_trade_no", outTradeNo);                //订单号
data.put("body",body);                               //商品描述
data.put("total_fee", "1");                          //支付金额,以分为单位
data.put("spbill_create_ip", getIpAddr(request));    //用户实际ip
data.put("notify_url", WXpayConfig.NOTIFY_URL);      //支付回调地址,可以写你执行完支付想要执行的代码,比如做支付记录,交易记录
data.put("trade_type", "JSAPI");                     //支付类型
data.put("openid", openId);                          //openId
data.put("sign", WXPayUtil.generateSignature(data,config.getKey())); //将上述信息和支付秘钥生成签名

4.统一下单

调用微信自带的工具类WXPay, 可以打印看看有没有成功

Map<String, String> resp = wxpay.unifiedOrder(data);
System.out.println("\n==========>统一下单resp:" + resp);

5.返回给前端调起微信公众号支付的参数

注意:需要二次签名,公众号支付的要求

Map<String, String> resultMap = new LinkedHashMap<String, String>();
resultMap.put("appid", config.getAppID());                    // 应用ID
resultMap.put("partnerid", config.getMchID());                    // 商户号
resultMap.put("prepayid", resp.get("prepay_id"));               // 预支付交易会话ID
resultMap.put("package", "Sign=WXPay");                        // 扩展字段
resultMap.put("noncestr", WXPayUtil.generateNonceStr());          // 随机字符串
resultMap.put("timestamp", String.valueOf(System.currentTimeMillis()/1000));  // 时间戳
resultMap.put("sign", WXPayUtil.generateSignature(resultMap, config.getKey()));   // 签名
resultMap.put("mweb_url", resp.get("mweb_url"));                                //调用支付地址
System.out.println("\n==========>调起支付resp:" + resultMap);

6.前端页面调起支付

引入wx的JS-SDK的js文件

function onBridgeReady(){  WeixinJSBridge.invoke( 'getBrandWCPayRequest', {  "appId":appId,     //公众号名称,由商户传入       "timeStamp":timeStamp,         //时间戳,自1970年以来的秒数       "nonceStr":nonceStr, //随机串       "package":package,       "signType":signType,         //微信签名方式:       "paySign":paySign //微信签名   },   function(res){        if(res.err_msg == "get_brand_wcpay_request:ok" ) {  console.log('支付成功');  //支付成功后跳转的页面  }else if(res.err_msg == "get_brand_wcpay_request:cancel"){  console.log('支付取消');  }else if(res.err_msg == "get_brand_wcpay_request:fail"){  console.log('支付失败');  WeixinJSBridge.call('closeWindow');  } //使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。  });
}  

结束!!!

还不会的可以去我的资源下载:https://download.csdn.net/download/qq_38423105/10496016

微信公众号支付 流程相关推荐

  1. php公众号支付后的微信通知,关于微信公众号支付细数我踩过的坑

    微信公众号支付流程 项目背景: 1.前后端分离,前端是jquery 获取后端接口 (php) 开发流程: 1.配置 进入微信公众平台,申请开通微信支付,不开通就别进行下一步了.开通后,进入左侧的微信支 ...

  2. 微信公众号支付申请配置流程

    微信公众号支付申请配置流程 公众号支付申请步骤 微信公众号支付配置 公众号支付:用户在微信内进入商家H5页面,在页面内完成支付. 公众号支付申请步骤 注册公众账号(政府或媒体订阅号.服务号才能接入支付 ...

  3. 微信公众号支付前端部分流程

    上周公司安排了微信公众号支付开发任务,经过快一周的不断填坑,终于把支付搞定,现在把遇到的问题和开发步骤记录一下,方便遇到同样问题的老铁们节省一些时间,少入些坑,先说一下本文不包含的内容,因为这些并不难 ...

  4. php 公众号微信支付流程,微信公众号支付完整流程案例

    简介 微信公众号支付,顾名思义就是必须在微信中实现支付,并且需要公众号配合. 教程 由于我们使用的是第三方封装好的接口,这里省去了我们自己配置公众号.为什么用第三方?因为个人没有申请权限. 交互细节: ...

  5. vue 调用共众url_vue单页面,在微信公众号支付中遇到的URL未注册BUG解决方法-Go语言中文社区...

    今天在做微信公众号支付的时候,遇到一个bug,在当前支付页面点击支付,就会报错,提示当前页面的URL未注册.如下图: 但是,这个URL我们是在后台微信公众号配置了的,所以说不会出错. 但是我们刷新一次 ...

  6. 微信公众号支付调用chooseWXPay提示“errmsg choosewxpay fail”

    微信公众号支付一直提示"errmsg choosewxpay fail",也没有提示具体错误信息,签名没有问题(签名验证地址:https://pay.weixin.qq.com/w ...

  7. js如何调用h5的日期控价_微信公众号支付H5调用支付解析

    最近项目需要微信支付,然后看了下微信公众号支付,虽然不难,但是细节还是需要注意的,用了大半天时间写了个demo,并且完整的测试了一下支付流程,下面分享一下微信公众号支付的经验. 一.配置公众号微信支付 ...

  8. vue 微信公众号支付接口_基于vue的h5项目之支付宝支付与微信支付

    本文仅记录基于vue开发h5项目过程中使用支付宝和微信支付过程中的重点与槽点,仅为前端部分,如有疏漏不正之处,请于文末评论探讨.注意:标红部分灰常重要,仔细阅读官方文档非常重要,耐心非常重要,细心非常 ...

  9. h5通过php微信支付宝支付,用H5调用支付微信公众号支付的解析

    这篇文章主要为大家详细介绍了微信公众号支付H5调用支付,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 最近项目需要微信支付,然后看了下微信公众号支付,虽然不难,但是细节还是需要注意的,用了大半天时 ...

最新文章

  1. 加权轮询算法PHP,PHP实现负载均衡的加权轮询方法分析
  2. idea Debug快捷键
  3. python1000个常用代码-30个Python常用极简代码,拿走就用
  4. mysql 存储过程 主键_存储过程生成主键
  5. SQL 脚本中的全角逗号引起【ORA-01756: 引号内的字符串没有正确结束】
  6. Httpclient发送json请求
  7. MySQL摘要_mysql摘要
  8. Web前端期末大作业--绿色自适应医疗健康医院网页设计(HTML+CSS+JavaScript+)实现
  9. (转)jquery基础教程八 load方法及小技巧
  10. 大鱼风控笔记 1:量化风控体系的风险板块
  11. android unity3d开发学习第一步
  12. Ubuntu下Tomcat连接MySql数据库
  13. 关于struct和class的知识
  14. html文件转为其他格式文件格式,HTML文件转Word文件格式
  15. 计量经济学计算机答案第一章,计量经济学计算机作业
  16. CentOS从零搭建SRS直播服务器
  17. direct 3d 渲染红蓝立体效果
  18. 梅特勒托利多xk3124电子秤说明书_托利多电子秤说明书
  19. 2021 考研英语题难度如何?英语一英语二有哪些亮点和槽点?
  20. 天津出差系列(一)----第一天

热门文章

  1. android 输入法 智能abc 风格,云风的 BLOG
  2. 辩驳一个默认的说法:IE6不支持!important
  3. 如何做好百度广告联盟
  4. python如何实现飞机上下移动_python项目实战 打飞机(二)
  5. java vs2010 难度_Java VS C++谁更胜一筹?
  6. 天大2021年秋学期考试《电工技术实验》离线作业考核试题
  7. 为什么没有幼年、青年、老年危机?
  8. Android 10 SDK 29 使用listFiles返回null空值的原因
  9. Caffeine 缓存
  10. 小程序源码:独家一比一精仿火萤动态壁纸全套微信小程序源码下载-支持动静态和头像