首先我只想说微信能把文档写清楚点吗?超级无敌巨坑

首先进入

微信开发者平台 https://open.weixin.qq/cgi-bin/index?t=home/index&lang=zh_CN 点击打开链接,

 

然后找到

微信APP支付接入商户服务中心 https://open.weixin.qq/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317780&token=&lang=zh_CN 点击打开链接

 

这一步是接入的前提,提交相关的材料信息等待审核,

 

 

接下来

 APP端开发步骤 https://pay.weixin.qq/wiki/doc/api/app/app.php?chapter=8_5 点击打开链接

 

告诉你如何在APP端写代码,这里是核心代码

 

调用这端代码的前提是拿到预付单号,这个就需要和自己的后端开发联调了,因为是从后端获取到的,正确调用这段代码后就会调起手机微信支付页面了。

说下几个android端的关键地方,

<!--微信相关-->
        <activity
            android:name=".wxapi.WXEntryActivity"
            android:exported="true"
            android:label="微信分享回调"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:theme="@style/Theme.AppCompat.NoActionBar" />

        <activity
            android:name=".wxapi.WXPayEntryActivity"
            android:exported="true"
            android:label="微信支付回调"
            android:launchMode="singleTop"
            android:screenOrientation="portrait"
            android:theme="@style/Theme.AppCompat.NoActionBar" />
        <!--微信相关-->

这2个Activity不要忘记注册在自己主工程里面了,这两个Activity的路径必须是APP包名.wxapi.xxxactivity,

APP包名和签名要和审核的时候一致

最后就是Java的后端的支付代码,官网的文档研究了很久,自己去下单拿到的预付费订单信息给APP端支付,

APP端始终调不起微信支付,返回error_code=-1,官方文档是这么说的,如下图:

官方文档也是搞笑哦,说得模棱两可,

 

下面链接是微信官方给出的一个生产sign签名的工具,用来对比自己生成的是否正确,接口可以改成自定义,

添加好请求参数,然后点击生成签名就好了

https://pay.weixin.qq/wiki/tools/signverify/

用这个工具生成的签名和自己的一模一样,但是客户端还是返回error_code = -1

其实Java后端生成的sign、nonce_str、time_stamp 这几个字段不能用微信返回的,

微信返回的和我们去请求的值不一样,把我们生成的发给APP端去支付,微信返回只需要用到预付费订单字段,

这里特别注意,sign字段返回给APP端的是提交参数和微信返回的预付费id再签一次名,不要用微信直接返回的,

这个地方官网文档一点都没提到,我还是看下面的demo发现的

 

最后在github上找个一个星星非常多的开源支付代码,完美解决问题,目前还不知道后端代码问题所在,贴下地址:

微信java后端支付demo

https://github/binarywang/weixin-java-pay-demo         

WxJava (微信开发 Java SDK),支持包括微信支付、开放平台、小程序、企业微信/企业号和公众号等的后端开发

https://github/Wechat-Group/WxJava                              

 

 

 

 

更多推荐

java 微信支付 demo