Android 微信支付

来源:互联网 发布:穆雅斓的淘宝店假货 编辑:程序博客网 时间:2024/05/16 01:37
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这些设计到签名的过程放到服务器做,防止客户端被反编译
第一次写技术性文章 请各位大神多多包涵 

0 0