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

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

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

一、准备工作:

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. 权威解释IDEA的“Include in project build”打钩或者不打勾有啥区别?
  2. python 运算太慢怎么办_python:网络安全攻击与防御的工具
  3. Dalvik与JVM区别
  4. linux mysql5.7.9下载_关于linux-Centos 7下mysql 5.7.9的rpm包的安装方式
  5. 二进制包 mysql_二进制包;mysql
  6. File类判断和获取功能
  7. 是什么职位_为什么说,质量工程师岗位变成了 “寡妇职位”?
  8. 在对的时间 遇见对的人 是一种幸福
  9. SAP Spartacus delivery mode continue button enable与否的逻辑
  10. 【t057】任务分配
  11. 部分仍在编辑文章 - Python基础专题 - 深度解析python中的赋值与拷贝
  12. linux运维好书《高性能Linux服务器构建实战Ⅱ》已出版发售,附封面照!
  13. 【转】一篇易懂的CAN通讯协议指南1
  14. 验证集与测试集的区别
  15. OpenXml编程--修正Word目录页码错误
  16. 计算机网络实验:802.3协议分析和以太网
  17. 【刷题记录14】Java工程师丨腾讯面试真题(2)
  18. phpAdmin中id字段如何设置自增
  19. 技术分享 | gh-ost 在线 ddl 变更工具​
  20. 如何发布日历提醒推送消息服务器,iOS开发 -- 通过app向手机自带的日历中添加事件提醒...

热门文章

  1. java的socket包_Java socket详解(转)
  2. C++ 圆与圆之间的距离是不能一概而论的
  3. P3205 [HNOI2010]合唱队 题解
  4. Python计算机二级编程题真题及考点总结(上篇)
  5. 浅谈贝叶斯判别(Bayes)
  6. pos机必须使用的物联网卡,流量卡
  7. 计算机主机电源线如何跳线,这些装机跳线的小技巧一般人我不告诉他
  8. Screen/Tmux/Byobu分屏工具的使用 ( by quqi99 )
  9. animationImages
  10. 东方财富网新版A股数据爬取