Android开发微信APP支付功能的要点小结
作者:daisy 发布时间:2023-02-22 12:34:20
基本概念
包名值得是你APP的包,在创建工程时候设置的,需要在微信支付平台上面设置。
签名指的是你生成APK时候所用的签名文件的md5,去掉:全部小写,需要在微信支付平台上面设置。
调试阶段,签名文件可以使用调试用的debug.keystore
,签名可以直接在eclipse上面查看,或者用工具查看 ,安装打开输入包名即可查看。
发布的时候一定需要在微信支付平台上面设置成发布用的签名值。
官方的Demo里面的内容并不是全是必须的,甚至只需要有libammsdk.jar就够了,AndroidManifest.xml也不用配置。
AndroidManifest.xml的配置和WXPayEntryActivity.java只是为了能够得到支付回调,可以先不用去管,先调试能不能发起支付。
把libammsdk.jar拷贝到你项目的libs下,并添加jar引用。
代码里发起支付请求:
IWXAPI api = WXAPIFactory.createWXAPI(this, Values.WXPAYAPPID);
api.registerApp(Values.WXPAYAPPID); // 注册APPID,这句很重要,不然不会发起调用
PayReq req = new PayReq();
req.appId = wxPay.appid;// 也就是Values.WXPAYAPPID,如果二者不一致的话是没法发起支付的。
req.partnerId = json.getString("partnerid");
req.prepayId = json.getString("prepayid");
req.nonceStr = json.getString("noncestr");
req.timeStamp = json.getString("timestamp");
req.packageValue = json.getString("package");
req.sign = json.getString("sign");
//req.extData = "";// "app data"; // optional
boolean r = api.sendReq(req);
if(!r) {
Toast.makeText(this,"打开微信支付失败!",Toast.LENGTH_SHORT).show();
}
上面的代码中相关的预下单ID、签名、时间戳等都是由服务端返回了,服务端在生成这些值的时候需要注意二次签名的问题。
正常的话微信客户端就会打开支付页面了,那么就可以再着手回调的事情了。
把WXPayEntryActivity.java拷贝到你项目包下的wxapi文件夹中,比如你的包名是com.xx.shop,那么就放到com.xx.shop.wxapi下面。
设置AndroidManifest.xml,让其支持回调:
<activity
android:name=".wxapi.WXPayEntryActivity"
android:screenOrientation="portrait" android:exported="true"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.VIEW"/><category android:name="android.intent.category.DEFAULT"/><data android:scheme="你的APPID"/>
</intent-filter>/>
</activity>
WXPayEntryActivity.java不需要布局文件的,或者可以根据你的需要进行布局。
为了调试方便,把WXPayEntryActivity.java中onResp
的代码改为:
@Override
public void onResp(BaseResp resp) {
Log.d("onPayFinish", "onPayFinish, errCode = " + resp.errCode);
if(resp.errCode==0){
Toast.makeText(this,"支付成功!",Toast.LENGTH_SHORT).show();
}else if(resp.errCode==-1){
Toast.makeText(this,"支付失败!",Toast.LENGTH_SHORT).show();
}else if(resp.errCode==-2){
Toast.makeText(this,"取消支付!",Toast.LENGTH_SHORT).show();
}
}
不管能不能支付成功,如果onResp
的代码能够被自动执行,那么说明你的AndroidManifest.xml里的配置是对了。
如果你对你的各项参数都很有把稳了(比如你们iOS组的都能支付了,就你Android的还在坑了),那么看一下api.registerApp(Values.WXPAYAPPID);
有没有,没错我就坑死在这里了,这种情况下第一次(很偶尔)的能够打开支付界面一下,后面都不行了。
总结
微信为啥不能给点详细的错误代码或者说明之类,就给一个-1,天知道是什么意思,真让人不爽。以上就是Android开发微信APP支付功能要点的全部内容,希望本文的内容对大家开发Android能有所帮助。


猜你喜欢
- 学习spring依赖注入的时候碰到这个坑,折腾了许久,记录一下以防其他小伙伴入坑!该异常主要原因是因为JDK与Spring版本不一致。要么更
- C#调用新浪微博APIWebRequest wq = WebRequest.Create(this.address);HttpWebRequ
- 如何加载权限表达式我们在上章内容中画了一张图,里面有三个分项,用户 角色 权限;那么接下来我们就要思考一个问题了,这三张表中的数据要从何而来
- 用法在java中经常会遇到需要对数据进行类型转换的场景,String类型的数据转为Int类型属于比较常见的场景,主要有两种转换方法:1. 使
- 1.JWT定义JWT(Json Web Token)是一种用于双方之间传递安全信息的简洁的、URL安全的表述性声明规范。JWT作为一个开放的
- 一、简单的命令-n 在非 GUI 模式下运行JMeter-t 要运行的 JMeter 测试脚本文件-r 远程执行启动全部代理机-H 代理机器
- 前言我又搞回笃NET啦!java之路真是命运多舛,好事多磨。不过,也许我已经进入无招胜有招,博取众家之长、融会贯通的地步了。对于WebApi
- 一、简介:介绍两种使用 BitmapTransformation 来实现 Glide 加载圆形图片和圆角图片的方法。Glide 并不能直接支
- 本文实例讲述了C#实现将汉字转化为2位大写的16进制Unicode的方法。分享给大家供大家参考。具体实现方法如下:说明:str.ToStri
- 本文实例讲述了Android开发之文件操作。分享给大家供大家参考,具体如下:目前,几乎所有的设备都会涉及到文件的操作,例如什么电脑,手机等设
- 本文介绍restTemplate基础用法。Java中get和post的用法请参考:一文带你搞懂Java中Get和Post的使用1 提供get
- 本文实例讲述了C#正则表达式匹配与替换字符串功能。分享给大家供大家参考,具体如下:事例一:\w+=>[A-Za-z1-9_],\s+=
- 前文传送门:NioEventLoop处理IO事件执行任务队列继续回到NioEventLoop的run()方法:protected void
- 前面文章已经详细介绍了Android界面的入门技术,相信大家在看完和跟着练习之后,会对于常用的Layout和View都会有一定的了解了,接下
- 本文实例讲述了Android实现SQLite添加、更新及删除行的方法。分享给大家供大家参考,具体如下:SQLiteDatabase类暴露了特
- filter自定义过滤器 增加了 对验证码的校验package com.youxiong.filter;import com.y
- 一、安装JDK1.卸载旧版本或者系统自带的JDK(1)列出所有已安装的JDKrpm -qa | grep jdk(2)卸载不需要的JDKyu
- 目录方案一,更改启动项方案二,禁用检查应用程序的CAS发布者策略方案一,更改启动项出问题应用的启动项是使用的默认设置,查看App.g.cs文
- 对于javascript的冒泡,我一直误解它了,冒泡,即是从底层往外blow blow blow ...惭愧的是,我一直以为阻止冒泡是阻止父
- zuul动态路由网关服务是流量的唯一入口。不能随便停服务。所以动态路由就显得尤为必要。数据库动态路由基于事件刷新机制热修改zuul的路由属性