最近一个项目需要接入微信支付,所以在现有的项目中接入这个功能,但是最终发现,微信支付是个大坑,至少我认为微信支付文档的撰写者应该是小学水平,又或者是幼儿园水平,写文档的能力简直无语,很多关键性的细节居然是概括或者全局描述,一个简单的支付校验,整整花去我一天时间,真的是怀疑了自己的智商。

至于说怎么解决的,是因为我终于看到两字”假如“,原来参数举例是不对的,只是打了个比方,参数格式也不是蛇形的,也只是打了个比方,这个时候,真的想把微信支付的文档撰写者按在地上摩擦,以下是截图证据:

好了废话不多说了,下面开始说明:

一、准备工作:

1、微信公众号,appid和appsecret(这里不做赘述,相信大家都没有问题)

2、商户号,mchId,证书,申请授权目录,申请商户API密钥(基本没有问题,如果有问题,给我留言,我来补上)

3、下载微信支付JSAPI的demo,地址是https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1,下载完了以后不能直接使用,因为按照sdk中的readme,是无法正常使用的(对的,这个就是微信的sdk和demo,就是这么神奇,官方出的也不能用)。

二、下面是对这些不完整进行修改的地方修改如下:

1、WXPayConfig.java文件,所有的abstract前加上public,其中有一个处理doMain的需要具体实现,如下:

/*** 获取WXPayDomain, 用于多域名容灾自动切换** @return*/
abstract IWXPayDomain getWXPayDomain();

改成

 /*** 获取WXPayDomain, 用于多域名容灾自动切换** @return*/
public IWXPayDomain getWXPayDomain() {IWXPayDomain iwxPayDomain = new IWXPayDomain() {public void report(String domain, long elapsedTimeMillis, Exception ex) {}public DomainInfo getDomain(WXPayConfig config) {return new IWXPayDomain.DomainInfo(WXPayConstants.DOMAIN_API, true);}};return iwxPayDomain;
}

2、然后编译成jar包,在引用的过程,需要创建一个WXConfig.java,复制下面代码:

import com.github.wxpay.sdk.IWXPayDomain;
import com.github.wxpay.sdk.WXPayConfig;
import com.github.wxpay.sdk.WXPayConstants;import java.io.*;
public class WXConfig extends WXPayConfig {private byte[] certData;public WXConfig() throws Exception {//此处是微信支付安全证书存放的位置,证书需自行下载//下载地址:登录微信商户平台-账户中心-API安全-API证书//动态读取安全证书写法可参考我的另一篇文章://https://blog.csdn.net/qq_36928715/article/details/104656618
//        String certPath = "F:/cert/apiclient_cert.p12";String certPath = "/data/cert/apiclient_cert.p12";File file = new File(certPath);InputStream certStream = new FileInputStream(file);this.certData = new byte[(int) file.length()];certStream.read(this.certData);certStream.close();}//微信公众号appidpublic String getAppID() {return "wx2323423423423423";}//商户号public String getMchID() {return "160923423423";}public String getKey() {return "GHJs34223423423423423423423";//32位商户api密钥}public InputStream getCertStream() {ByteArrayInputStream certBis = new ByteArrayInputStream(this.certData);return certBis;}public int getHttpConnectTimeoutMs() {return 8000;}public int getHttpReadTimeoutMs() {return 10000;}}

3、然后统一下单,且计算paySign,paySign签名的值是appId,nonceStr,timeStamp,package四个参数(跟官方文档提的那个一毛线关系都没有,因为他写了个假如,所以他也没说是真的,就让你自己猜吧,加密方式必须是MD5,不要问为什么,官方就是这么high),尽量调用微信sdk内置的签名方法,代码如下:

WXConfig config = new WXConfig();
WXPay wxpay = new WXPay(config);Map<String, String> data = new HashMap<String, String>();
data.put("body", "腾讯充值中心-QQ会员充值");
data.put("out_trade_no", "2016090910595900000012");
data.put("device_info", "WEB");
data.put("fee_type", "CNY");
data.put("total_fee", "1");
data.put("spbill_create_ip", "123.12.12.123");
data.put("notify_url", "http://www.example.com/wxpay/notify");
data.put("trade_type", "JSAPI");
data.put("product_id", "12");
data.put("openid", "dhajkgdhjaghj13267816381");
data.put("sign_type", "MD5");Map<String, String> resp = wxpay.unifiedOrder(data);
//后端生成paySign给前端,放置签名失败
Date date=new Date();
String sec=String.valueOf(date.getTime()/1000);
Map map = new HashMap();
map.put("appId", config.getAppID());// 公众号id
map.put("nonceStr",resp.get("nonce_str"));// 随机字符串
map.put("timeStamp",sec);
map.put("package", "prepay_id="+resp.get("prepay_id"));
map.put("signType", "MD5");
String sign = WXPayUtil.generateSignature(map,config.getKey());
map.put("paySign", sign);

4、前端调用:

WeixinJSBridge.invoke('getBrandWCPayRequest', {"appId": wxObj.appid,//公众号ID,由商户传入"timeStamp": wxObj.timeStamp,//不要自己生成,取后端传回的"nonceStr": wxObj.nonceStr, //不要自己生成,取后端传回的随机串"package": "prepay_id=" + wxObj.prepayId,//预付订单"signType": "MD5",//微信签名方式:"paySign": wxObj.signType //不要自己生成,取后端传回的微信签名 },function (res) {if (res.err_msg == "get_brand_wcpay_request:ok") {// 使用以上方式判断前端返回,微信团队郑重提示://res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。console.log(res);}
});

5、到此就OK了。下面我会把修好的sdk和调用的代码上传,提供下载:

微信支付JSAPI支付修改版本wxpay-sdk-3.0.9

一次性解决微信支付-JSAPI支付问题(想把微信支付JSAPI文档撰写者按在地上摩擦)相关推荐

  1. 解决Adobe Arcobat Reader DC打开PDF提示:正在准备文档以供阅读,请稍后

    解决Adobe Arcobat Reader DC打开PDF提示:正在准备文档以供阅读,请稍后 解决Adobe Arcobat Reader DC打开PDF提示:正在准备文档以供阅读,请稍后 问题描述 ...

  2. 解决pdf不能打印,不能注释,不能修改,不能保存等文档限制

    解决pdf不能打印,不能注释,不能修改,不能保存等文档限制 pdf下载的文件可能保存不完整,305页的只下载了298页,阅读的宝贵批注因为文档不完整而无法保存,出现109等号错误 PDF"文 ...

  3. 解决《获取My Document目录错误,可能”我的文档“目录不存在》

    打开安装好的程序会出现下面的错误 解决<获取My Document目录错误,可能"我的文档"目录不存在> 方法:开始-运行-搜索regedit.exe打开注册表 依次打 ...

  4. 多闪:我真没有和微信杠,我只是想“颠覆”微信

    后台回复[领取资源],领取公众号福利! 最近,字节跳动发布了一款新的产品,一个主打年轻用户的视频社交软件,它就是多闪. 这款APP目前好像只能用抖音的帐号登录,并且和抖音的私信聊天互通,说白了就是把抖 ...

  5. 想要打印大量Word文档在哪里打印比较便宜

    如果您想要打印大量的Word文档的话,您会选择在哪里打印呢?是选择在线下打印复印店,还是线上打印复印店呢?一般大批量打印文件,小编推荐大家可以到线上打印平台去打印.选择线上打印要比线下打印的价格低,而 ...

  6. 我只是想使用一下微软在线文档

    因为在Linux上作开发,想使用微软提供的在线Office: https://products.office.com/zh-cn/office-online/documents-spreadsheet ...

  7. 微信小程序(原生):基本开发相关文档

    1.微信公众平台(后台登录页): https://mp.weixin.qq.com/ 2.微信小程序官网文档(组件+api等): https://developers.weixin.qq.com/mi ...

  8. C# 淘宝商品微信返利助手开发-(二)返利助手开放文档以及帐号申请地址

    系列教程一目录:返利助手原理 系列教程二目录:返利助手开放文档以及帐号申请地址 系列教程三目录:返利助手开发(1)API介绍 系列教程四目录:返利助手开发(2)淘宝分享的内容如何只取淘口令 系列教程五 ...

  9. 基于云开发的微信答题活动小程序v1.0搭建部署帮助文档

    11月是全国"119"消防宣传月,不少企事业单位都会举办消防安全知识竞答活动,因此我基于云开发搭建了消防安全知识答题活动小程序. 接着,还写完了初阶的手把手教你搭建答题活动小程序系 ...

最新文章

  1. 从1G到5G,从回顾过去到展望未来
  2. 《你的灯亮着吗》读书笔记1
  3. 卷积神经网络CNN总结
  4. 开源的库RestSharp轻松消费Restful Service
  5. python2转python3代码_Python2代码转成Python3代码
  6. 漫话:如何给女朋友解释为什么Java线程没有Running状态?
  7. Linux下最快速共享目录的方法
  8. 安装centos linux7,安装centos7
  9. 许怡然:网游创业失败全攻略
  10. 机器学习梯度消失,梯度爆炸原因
  11. Java面向对象编程(五)特殊类
  12. [UE4]让Spline具象化
  13. 应聘高薪工作,怎样写简历?
  14. gps wifi信号测试软件,搜星+WiFi+EMI 导航平板信号性能横评
  15. 银河麒麟高级服务器部署glusterfs
  16. 给一个字符类型的数组chas和一个整数size,请把大小为size的左半区整体右移到右半区,右半区整体移动到左边。
  17. Jupyter notebook 报错 500 : Internal Server Error的解决方法
  18. 计算机的优缺点英语作文100词,英语作文 电脑的优点和缺点_900字_英语作文
  19. 明源笔试题目--将一个正整数分解质因数
  20. Easy Mock 的使用

热门文章

  1. Synopsys license
  2. 谁都可以做-几分钱打造完美DIY面膜 - 健康程序员,至尚生活!
  3. 土地变更调查 名词解释
  4. 全网最齐全的《大数据选择题题库.pdf》限时开放下载!
  5. 为什么全世界都要鼓励青少儿学习编程?
  6. 2018最新大数据职业划分和薪资介绍(大数据从事者须知)
  7. 一打开控制台窗口就中文输入_Lightconverse灯光设计软件中文电子文档教程免费分享...
  8. Neo4j -CQL的基本使用(新手快速入门)
  9. DRiV Incorporated 在今年晚些时候将从 Tenneco 脱离
  10. 2021年安全员-A证考试及安全员-A证考试资料