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这些设计到签名的过程放到服务器做,防止客户端被反编译
第一次写技术性文章 请各位大神多多包涵

更多相关文章

  1. 手写选择题识别-生成编译opencv项目.so文件-失败
  2. Android(安卓)Application Digital Signatures - Android(安卓)
  3. Android中如何查找内存泄露
  4. Android(安卓)生成 keystore签名文件
  5. 移动支付-修复FireFox在android移动设备下面的Session 丢失的问
  6. [Android] 基于 Linux 命令行构建 Android(安卓)应用(四):命令行构
  7. 各位大佬都是怎么开发调试系统应用的
  8. android 签名相关
  9. AndroidStudio使用GreenDao的方法

随机推荐

  1. Android的FrameLayout布局介绍
  2. Linux通过shell脚本实现JDK版本之间的快
  3. android快捷键
  4. Android设置权限问题
  5. Android有两种方法检测USB设备插入
  6. Android学习笔记1
  7. android实现点击按钮控制图片切换
  8. 我的第一个Android 多媒体的Demo
  9. Android请求获取Java后端数据,登录界面例
  10. Android(安卓)Gesture手势操作(手势翻页