android安装多个微信支付,android微信支付详解与坑
要想在自己的APP中实现APP支付必须申请开通支付功能,这些按着文档来吧,我还是直接说Android中的问题吧。
一、签名
一定要在开放平台为自己的APP配置正确的包名和签名(签名:将APP打一个正式环境的包,然后在微信开放平台下载签名工具进行签名)。
二、打包测试
和微信的第三方登录一样,必须要打正式包,不是debug的,来进行测试,这样就没有办法调试了,感觉很不爽。所以提供一个办法来拯救一下嘿嘿:
在build.gradle文件中设置debug环境和relealse环境的签名相同就可以解决这个文通了,已经试过了,可以的。
signingConfigs {
release {
//.jks文件放在项目目录
storeFile file("xxx.jks")
storePassword "xxx"
keyAlias "xxx.release"
keyPassword "xxx"
}
debug {
//.jks文件放在项目目录
storeFile file("xxx.jks")
storePassword "xxx"
keyAlias "xxx.release"
keyPassword "xxx"
}
}
接下来按着官网的文档和demo来完成:
1、定义一个全局的变量:
private IWXAPI api;
2、注册APPID
api = WXAPIFactory.createWXAPI(this, "你在微信开放平台创建的app的APPID");
官网是这样注册的,但是,下面要用到msgAPi,所以定义为全局的。
final IWXAPI msgApi = WXAPIFactory.createWXAPI(SelectPaymentMethodActivity.this, null);
msgApi.registerApp("你在微信开放平台创建的app的APPID");
3、开始支付
当你点击支付的时候去调用服务端的接口(服务端调用统一下单接口,反geini一些信息),所以这里你不能自己独立完成需要后端的支持。
//我将后端反给我的信息放到了WeiXinPay中,这步是获取数据
WeiXinPay weiXinPay = (WeiXinPay) map.get("weixinpay");
//这个在官网里就会看到,将你获取的信息赋给payReq,这块就是调起微信的关键
PayReq payReq = new PayReq();
payReq.appId = weiXinPay.getAppid();
payReq.partnerId = weiXinPay.getPartnerid();
payReq.prepayId = weiXinPay.getPrepayid();
payReq.packageValue = weiXinPay.getPackage_exten();
payReq.nonceStr = weiXinPay.getNoncestr();
payReq.timeStamp = weiXinPay.getTimestamp();
payReq.sign = weiXinPay.getSign();
api.sendReq(payReq);
4、接下来就是在微信里的一些东西了,我们不用管,我们只需要关心回调页WXPayEntryActivity,这里需要注意该文件必须在wxapi这个文件夹下,及com.xxx.xxx.wxapi.WXPayEntryActivity
//必须实现接口,重写方法
public class WXPayEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
private IWXAPI api;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wxpayentry);
api = WXAPIFactory.createWXAPI(this, "wx72e0123dd9b54a73");
api.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq baseReq) {
}
@Override
public void onResp(BaseResp baseResp) {
Log.e("---------->","code:"+baseResp.errCode);
if (baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
//这里就是支付完成后需要做的事,如跳到哪个页面啥的
}
}
}
5、还有一点在功能清单中对Activity中进行注册
android:exported="true"
android:launchMode="singleTop"/>
-1 扫坑(可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等)
微信
商户系统和微信支付系统主要交互说明:
步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。
步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。参见【统一下单API】。
步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appid,partnerid,prepayid,noncestr,timestamp,package。注意:package的值格式为Sign=WXPay
步骤4:商户APP调起微信支付。api参见本章节【app端开发步骤说明】
步骤5:商户后台接收支付通知。api参见【支付结果通知API】
步骤6:商户后台查询支付结果。,api参见【查询订单API】
调起支付接口
请求参数
字段名
变量名
类型
必填
示例值
描述
应用ID
appid
String(32)
是
wx8888888888888888
微信开放平台审核通过的应用APPID
商户号
partnerid
String(32)
是
1900000109
微信支付分配的商户号
预支付交易会话ID
prepayid
String(32)
是
WX1217752501201407033233368018
微信返回的支付交易会话ID
扩展字段
package
String(128)
是
Sign=WXPay
暂填写固定值Sign=WXPay
随机字符串
noncestr
String(32)
是
5K8264ILTKCH16CQ2502SI8ZNMTM67VS
随机字符串,不长于32位。推荐随机数生成算法
时间戳
timestamp
String(10)
是
1412000000
签名
sign
String(32)
是
C380BEC2BFD727A4B6845133519F3AD6
签名,详见签名生成算法注意:签名方式一定要与统一下单接口使用的一致
返回结果
名称
描述
解决方案
0
成功
展示成功页面
-1
错误
可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
-2
用户取消
无需处理。发生场景:用户不支付了,点击取消,返回APP。
几大坑原因+解决:
1、 微信开放平台上传的签名问题(调试环境使用的签名要和微信后台保持一致)
2、 Manifest文件中WXPayEntryActivity 的配置问题。一定要声明
3、 WXPayEntryActivity 类必须放在 包名.wxapi 下
4、 签名工作一般由后台完成,在生成签名时,务必注意key的拼写问题,比如必须拼appid而不是appId,必须拼prepayid而不是prepayId,这里跟上面PayReq 对象中字段的命名方式不一样,用错了也是照样返回-1。一定要小写!!!参与签名的字段名为appid,partnerid,prepayid,noncestr,timestamp,package。注意:package的值格式为Sign=WXPay
5、签名所使用的是 微信商户平台的API密钥,而不是微信开放平台 的 AppSecret。 API密钥在商户平台后台-->API安全-->先安装操作证书,后设置密钥
6、清空缓存,最后再说一个坑,如果经过一系列的配置,发现完全都配置好了,可是微信支付依然返回-1。而此时我们可能又会回头排查各个节点的问题,是配置问题?是自己的数据传递问题?到底哪里的bug?
其实这时候,清空下自己的应用缓存就可以了,通过 设置-应用管理-your app-清空缓存,进行缓存清理过后,立竿见影拿到成功的回调!
参考文档:
android安装多个微信支付,android微信支付详解与坑相关推荐
- PHP支付接口教程,详解微信支付(二)
PC扫码支付 扫码支付首先是要分清楚两种模式: [模式一]:商户后台系统根据微信支付规则链接生成二维码,链接中带固定参数productid(可定义为产品标识或订单号).[模式二]:商户后台系统调用微信 ...
- android 7 apk 安装程序,Android安装apk文件并适配Android 7.0详解
Android安装apk文件并适配Android 7.0详解 首先在AndroidManifest.xml文件,activity同级节点注册provider: android:name="a ...
- android apk安装过程,Android安装apk文件并适配Android 7.0详解
Android安装apk文件并适配Android 7.0详解 首先在AndroidManifest.xml文件,activity同级节点注册provider: android:name="a ...
- 本文是对优雅草蜻蜓C影视便捷追剧小程序微信支付配置教程-大部分小程序支付通用,从微信配置到后台的详解,其他小程序系统均可参考
本文是对优雅草蜻蜓C影视便捷追剧小程序微信支付配置教程-大部分小程序支付通用,从微信配置到后台的详解,其他小程序系统均可参考 微信支付配置 1,下载工具 编辑切换为居中 添加图片注释,不超过 14 ...
- Android绘图Canvas十八般武器之Shader详解及实战篇(上)
本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 前言 Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有java层的,也有jni层深入到Frame ...
- Android M新特性Doze and App Standby模式详解
转载请标明出处:http://blog.csdn.net/xx326664162/article/details/52312122 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的 ...
- python下载微信公众号文章_python如何导出微信公众号文章方法详解
1.安装wkhtmltopdf 下载地址:https://wkhtmltopdf.org/downloads.html 我测试用的是windows的,下载安装后结果如下 2 编写python 代码导出 ...
- 生成jni的android.mk,Android Studio 3.5版本JNI生成SO文件详解
学习在于记录,把自己不懂得容易忘记得记录下,才是最好得选择. 废话不多说,想要在Android开发中嵌入c/c++代码,直接开始如下步骤 1.创建需要调用的Java类 在你某个指定的包下创建如下类pa ...
- 阿里聚安全Android应用漏洞扫描器解析:本地拒绝服务检测详解
阿里聚安全Android应用漏洞扫描器解析:本地拒绝服务检测详解 阿里聚安全的Android应用漏洞扫描器有一个检测项是本地拒绝服务漏洞的检测,采用的是静态分析加动态模糊测试的方法来检测,检测结果准确 ...
- android启动页使用gif,android中使用react-native设置应用启动页过程详解
一.背景 在我们使用react-native进行编写代码的时候,当启动应用的时候,我们会看到如下界面 然而,这样的启动界面是非常的不又好,那么我们该怎么进行处理启动界面呢?有如下两种方案 二.方案 1 ...
最新文章
- mysql防注入pdo_mysql PDO和存储过程动态SQL注入
- 内置装饰器一:@classmethod、@staticmathod
- 鸿蒙系统没有优势了吗,“鸿蒙系统”超震撼,带你细数它的优势
- 头条上python广告_满大街都是Python广告,真的如广告说的那样方便吗?,学精通后真能月如过万吗?业内大佬怎么看?...
- js 将图片置灰_JS 上传一张图片让其部分变灰色
- linux cmake装在自己目录下,如何在Linux下安装cmake
- 修改build:gradle版本
- 关于移动端布局和pc端写法
- 【Elasticsearch】wildcard、fuzzy、regexp、prefix
- 给WPF文字加多条修饰线
- windows 快捷调用
- 关于安装TOMCAT解压版环境配置流程
- flash在线拍照并上传
- 过期系统激活 win7
- 关于什么是AndroidX(一)
- 动态平衡网格交易_网格交易 套利:期货经典书籍
- 微信小程序-医护人员排班系统
- HTML期末作业:基于html+css+javascript+jquery实现古诗词网页 学生网页设计作品 web前端开发技术 web课程设计 网页规划与设计...
- epub文件打开乱码_什么是EPUB文件(以及如何打开一个文件)?
- 【Electron】 NSIS 打包 Electron 生成exe安装包
热门文章
- python如何调用gurobi_gurobi安装方法
- kindle书籍的后缀名_大家kindle里的电子书一般用什么格式的呢?
- 德国计划采用数字驾照
- 【零基础强化学习】强化学习中的有模型和无模型
- MD5加密中文结果不一致
- 英语经典作文写作关联句
- 一般人不知晓的10个“高能”网站,学编程和赚钱两不误
- java的color怎么转数字,将普通的数字转为color值,java和javascript的区别
- UG编程基本操作及工艺介绍分析
- “最强大脑”智慧检务如何落地?最佳智慧检务大数据平台案例!