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与设置的不匹配、其他异常等)

5b7b3074d8e4

微信

商户系统和微信支付系统主要交互说明:

步骤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-清空缓存,进行缓存清理过后,立竿见影拿到成功的回调!

参考文档:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值