最近公司项目涉及了微信支付,经过一天多的摸爬滚打,总算搞定了。
写这篇文章的目的主要是能让大家少走些弯路,也让自己好好复习一下,下面有我在了解微信支付过程中看的几个比较好的网站,跟大家一起共享下。网上太多人吐槽微信支付有太多的坑了,我就不吐槽了,希望大家多注意下,哈哈
准备工作
首先进入
https://open.weixin.qq.com/资源中心,仔细阅读接入指南
然后好好阅读下
https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=1_1#里的内容,可以让你更好的理解微信支付,刚开始不要急,好好了解清楚过程。
接下来根据微信官方文档导入相应的包和demo,这些你们都会的啦

注意坑一:
企鹅不成文规定---在你主包下面,必须要有 主包.wxapi这个包名(就是我主包是aaa,那么必须有aaa.wxapi这个包),同时在这个包下面必须有WXPayEntryActivity这个类名(支付后回调的activity)
配置Androidmanifest.xml时注意配置如下的内容:
<pre name="code" class="html"><activity
android:name=".PayActivity"
android:label="@string/app_name"
android:exported="true"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!--这个intent-filter不要忘了-->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="wxd930ea5d5a258f4f"/>
</intent-filter>
</activity>
(上面的内容我项目里没用到,我没配置。。。)
<receiver
android:name=".AppRegister">
<intent-filter>
<action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP" />
</intent-filter>
</receiver>
还有几个相应的Activity记得配置
微信支付
注意坑二:就是你使用官方demo的时候,只有第一次支付成功,后面几次支付都返回-1 ,请参考 http://www.360doc.com/content/15/0214/10/7044580_448519997.shtml
接下来参考这两位博主的文章,应该可以基本实现微信支付功能了,第一位博主文章最下方还有demo,比官方的好多了

(这样引用应该不算侵权吧,如果是,告知下我哈,小弟第一次写博客
)

微信支付可能遇到的问题
(用公司项目的签名)body为中文时报签名错误:
只需要把xml请求参数转换为字节数组后,用“ISO8859-1”编码格式进行编码为字符串就OK啦
<pre name="code" class="java"><pre name="code" class="java"> try {
return new String(sb.toString().getBytes(), "ISO8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "";
主要是这句
return new String(sb.toString().getBytes(), "ISO8859-1");