Amdroid中微信支付遇到的问题
来源:互联网 发布:手机版 淘宝 人工客服 编辑:程序博客网 时间:2024/06/05 11:06
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
官网demo
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1
官方文档
Android开发要点说明
1、后台设置
商户在微信开放平台申请开发应用后,微信开放平台会生成APP的唯一标识APPID。由于需要保证支付安全,需要在开放平台绑定商户应用包名和应用签名,设置好后才能正常发起支付。设置界面在【开放平台】中的栏目【管理中心 / 修改应用 / 修改开发信息】里面,如图8.8红框内所示。
应用包名:是在APP项目配置文件AndroidManifest.xml中声明的package值,例如DEMO中的package="net.sourceforge.simcpux"。
应用签名:根据项目的应用包名和编译使用的keystore,可由签名工具生成一个32位的md5串,在调试的手机上安装签名工具后,运行可生成应用签名串,如图8.9所示,绿色串即应用签名。签名工具下载地址https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk
图8.9
2、注册APPID
商户APP工程中引入微信JAR包,调用API前,需要先向微信注册您的APPID,代码如下:
final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);
// 将该app注册到微信
msgApi.registerApp("wxd930ea5d5a258f4f");
3、调起支付
商户服务器生成支付订单,先调用统一下单API(详见第7节)生成预付单,获取到prepay_id后将参数再次签名传输给APP发起支付。以下是调起微信支付的关键代码:
IWXAPI api;
PayReq request = new PayReq();
request.appId = "wxd930ea5d5a258f4f";
request.partnerId = "1900000109";
request.prepayId= "1101000000140415649af9fc314aa427",;
request.packageValue = "Sign=WXPay";
request.nonceStr= "1101000000140429eb40476f8896f4c9";
request.timeStamp= "1398746574";
request.sign= "7FFECB600D7157C5AA49810D2D8F28BC2811827B";
api.sendReq(req);
注意:该sign生成字段名列表见调起支付API
4、支付结果回调
参照微信SDK Sample,在net.sourceforge.simcpux.wxapi包路径中实现WXPayEntryActivity类(包名或类名不一致会造成无法回调),在WXPayEntryActivity类中实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。注意一定不能以客户端返回作为用户支付的结果,应以服务器端的接收的支付通知或查询API返回的结果为准。代码示例如下:
publicvoidonResp(BaseRespresp){
if(resp.getType()==ConstantsAPI.COMMAND_PAY_BY_WX){
Log.d(TAG,"onPayFinish,errCode="+resp.errCode);
AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
builder.setTitle(R.string.app_tip);
}
}
回调中errCode值列表:
问题1后台设置
文档上说:下载一个工具填入包名即可生成
文档上说:应用签名由keystore文件决定
我们都知道keystore(AndroidStudio是jks文件,实质一样)文件是用来编译apk文件的,每台电脑上对应的keystore文件的内容都不一样,生成的签名也都不一样,那么一个keystore对应一个应用签名,生成一个apk文件,当不对应的时候就不能调起微信支付
那么应用签名和keystore(AndroidStudio是jks文件,实质一样)文件有什么关系?
我找到了我电脑上默认的keystore文件C:\Users\hengli\.android\debug.keystore
用命令行打开:
1打开CMD命令行进入本机安装的jdk下的bin目录
cd C:\Program Files\Java\jdk1.8.0_31\bin
2打开debug.keystore
keystore文件路径C:\Users\hengli\.android\debug.keystore
命令行输入:keytool -list -v -keystore C:\Users\hengli\.android\debug.keystore -storepass android
我的 应用签名是:d1e6229669b9ba9e1d8ff69a18967c34
debug.keystore中证书指纹:MD5: D1:E6:22:96:69:B9:BA:9E:1D:8F:F6:9A:18:96:7c:34
我们很明显的看到微信文档中说的签名就是debug.keystore中证书指纹:MD5值去掉冒号,并变成小写就行了
在项目正式签名的时候使用AndroidStudio生成jks文件,在用jks生成apk,我们只要根据jks文件中的MD5,改一下应用签名就好了
jks文件还是用上面的命令打开,只是把 C:\Users\hengli\.android\debug.keystore换成自己jks的路径就好了
问题2支付结果回调
文档上说:参照微信SDK Sample,在net.sourceforge.simcpux.wxapi包路径中实现WXPayEntryActivity类(包名或类名不一致会造成无法回调)
实际上我测试了只要WXPayEntryActivity只要放在wxapi包下,wxapi包放在自己程序的主包名下
- Amdroid中微信支付遇到的问题
- 支付遇到的问题
- 移动MM 支付SDK遇到的问题
- 移动MM 支付SDK遇到的问题
- 微信支付遇到的问题总结
- iOS支付宝集成遇到的问题
- 接入支付宝时遇到的问题
- 对接alipay支付遇到的问题
- 最新支付宝集成遇到的问题
- 微信支付接入遇到的问题
- 微信支付我遇到的问题
- 支付宝集成遇到的问题
- iOS支付宝开发遇到的问题
- 安卓微信支付遇到的问题及解决办法
- 微信支付遇到的问题集
- ios支付宝集成遇到的问题?
- 微信支付遇到的小问题
- 第三方支付遇到的问题
- Jprofiler的使用
- First
- NavigationView的使用
- ACM_生成可重集的排序
- POJ 3682 (dp)
- Amdroid中微信支付遇到的问题
- 通信录
- 八皇后GO语言实现
- linux命令行参数解析函数 getopt
- 简单的天气预报app
- 可编辑DIV,输入图片
- Android横屏竖屏切换的问题
- 解决plsql连接oracle服务器(云服务器)自动断开问题
- 记第一次知网爬虫实践