您的位置:首页 > 移动开发 > 微信开发

Android 微信支付

2015-09-09 14:49 507 查看
Android调用微信支付

由于官方资料太乱而且有些bug解释很不完善,又没有人工客服技术支持,网上的资料也是零零碎碎转来转去,没有博客就写篇日志记录一下,顺便喷一句,腾讯的东西真的太坑了,以下是整体流程和个人认为比较容易出错的地方的个人总结:

1.后台设置

申请开发应用完成后,使用商户账号登录,可以创建APP,其中以下两项是必填的,而且不是随便填的



(1)应用包名:填写Manifest中的package;

(2)应用签名:首先从官网下载GenSignature(一个android程序),运行改程序,在输入框中输入Manifest中的package名,点击"Get Sginature"生成的绿色字符串就是应用签名;

(下载GenSignature的地址: https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1)

2. 下载微信官网的demo(也在下载GenSignature的地方),导入到eclipse,之后的操作直接改官方demo就行了

(1)修改Manifest: 更改<data>标签中的android:scheme属性,值为APP申请成功后返回的AppId值,如(wx89dadj29839asdj4)

(2)修改Constants(Java类): 该类工需要三个属性 (都是String,都是常量)

① APP_ID:与上一步陈述相同 (申请创建APP后微信官方派发)

② MCH_ID:商户号 10位数字(商户创建成功后微信官方派发)

③ API_KEY:API密钥 这个值是在商户平台设置的 相同即可(自定义)

3.在PayActivity做相应修改

packageParams.add(new BasicNameValuePair("appid", Constants.APP_ID));

packageParams.add(new BasicNameValuePair("mch_id", Constants.MCH_ID));

大致为以上三步,如果还有bug,可能是以下原因:

1.点击APP支付生成预支付订单返回"prepay_id=null",这个应该比较好解决 就是上述步骤没有设置对

2.如果只有第一次能够成功支付,之后均返回-1很可能是keystore问题,网上有种方式是清空微信缓存,确实清空一次能用一次,但是这种用户体验显然不合适,支付一次微信完全清空一次不太合适吧...

点击调起微信支付时,直接跳转到回调界面(WXPayEntryActivity)并返回-1,这里就是腾讯没有任何说明的地方了,可以尝试以下步骤:

(1).Window->Preferences-> Android->Build->Custom debug keystore点击浏览,选择到下载demo的文件加下找到demo文件夹下的debug.keystore(默认是android文件夹下的debug.keystore需要更换),点击完成

(2) 如果还是不行,右键项目名->Android Tools->Export Signed Application Package,选择项目,下一步->Use existing keystore,选择成demo文件夹下的debug.keystore,导出生成apk,之后再运行一边GenSignature程序输入Manifest中的包名,看生成的应用签名是不是变了?如果是可能就是keystore的问题,将生成的新的应用签名同步到微信官网上的“微信开放平台-管理中心-移动应用”-“开发信息”-"应用签名"即可


4.若在更改微信官方demo中参数后,出现签名错误的情况,可以尝试把提交的xml数据转换成ISO8859-1格式:

return
new String(xmlstring.getBytes(),"ISO8859-1");

参考:http://blog.csdn.net/qiwenmingshiwo/article/details/41902551 ;

5. 如果更改notiy_url出现签名错误的话,可能是因为url中携带的键值对参数使用了"&"符号连接两个kv对,换成其它符号即可("="符号不影响,其它的没试过)
6.支付如果可以成功,那么根据腾讯安全性要求,应该把统一下单API、支付结果通知API和查询订单API这些设计到签名的过程放到服务器做,防止客户端被反编译

第一次写技术性文章 请各位大神多多包涵
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: