android微信支付跳转逻辑,Android对接微信支付

本文记录了在Android中对接微信支付的过程,包括签名错误排查、业务流程详解、调用接口获取prepayId以及调起支付的方法。主要难点在于两次不同的签名生成,以及正确组装调起支付所需的参数。
摘要由CSDN通过智能技术生成

这几天给app对接了微信支付,官方的demo真是。。。第一次果然不免爬几个坑,记录一下,避免遗忘。

错误说明

在保证提供的参数都正确的情况下,往往测试微信支付失败的原因是签名错误,这个时候应该仔细核对流程。就我自己而言碰到的问题就是搞错了最后发送订单的时候的签名sign参数。这个签名不是第一次组拼的签名,也不是生成预支付交易单,获取prepayId时返回的签名,而是获取到prepayId后用prepayId和其他参数第二次组拼成的sign。

流程说明

详细的业务流程为微信官方文档里有,我这边以所有参数由客户端提供的方式简单说明一下请求流程。

获取必须参数,第一次签名。

需要说明的是签名中的key参数是由我方自行在微信商户平台设置的。具体位置:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置

生成预支付交易单,获取prepayId。

调用微信的接口“https://api.mch.weixin.qq.com/pay/unifiedorder”获取prepayId。另外返回信息中的sign并不是最后调起支付中的sign参数。

第二次签名。

用"appid","noncestr","package","partnerid","prepayid","timestamp"生成第二次签名。签名方式与第一次相同,参数不同(注意参数顺序)。这样就拿到了调起微信支付所需的所有参数。

调起微信支付。

代码说明

public class WXPayUtils {

private Context mContext;

private PayReq req;

private IWXAPI iwxapi; //微信支付api

private Map resultunifiedorder;

public WXPayUtils() {

}

public WXPayUtils(Context context) {

this.mContext = context;

req = new PayReq();

iwxapi = WXAPIFactory.createWXAPI(context, null); //初始化微信api

}

private Handler handler = new Handler() {

@Override

public void handleMessage(Message msg) {

switch (msg.what) {

case 0: //获取参数及调起支付

getPayParameter();

sendPayReq();

break;

default:

break;

}

}

};

/**

* 第一次签名及生成prepayId

**/

public void toWXPayAndSign(int money) {

PrePayIdAsyncTask prePayIdAsyncTask = new PrePayIdAsyncTask();

prePayIdAsyncTask.execute(money);

}

private class PrePayIdAsyncTask extends AsyncTask> {

@Override

protected void onPreExecute() {

// TODO Auto-generated method stub

super.onPreExecute();

}

@Override

protected Map doInBackground(Integer... params) {

// TODO Auto-generated method stub

String urlString = "https://api.mch.weixin.qq.com/pay/unifiedorder";

in

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值