我走过最长的路是你的套路——Android端微信支付填坑之路

关于微信支付这方面的优秀文章已经很多了,所以本篇博客主要介绍一下博主在集成微信支付的时候遇到的一些问题,希望给刚刚接触这方面的开发者一些帮助。因博主能力有限,讲的不对的地方希望大家踊跃指出。另外,祭出博主参考的一些优秀博客。

Android接入微信支付完全解析
http://www.jianshu.com/p/1a17622c9f48
带你走进Android微信支付和支付宝支付服务端操作放到客户端的故事
http://blog.csdn.net/dgs960825/article/details/51959180

首先我们来讲一讲微信支付的流程,这个相信大多数人都已经非常了解了,已经了解的就略过吧~
①app端将商品信息上传给后台服务器,请求生成预支付订单
②后台服务器调用统一下单接口向微信服务器发送请求,微信服务器生成预订单,并生成一个prepay_id返回给后台服务器(这一步也可以在app进行)
③后台服务器将这个prepay_id返回给app端
④用户点击确认支付,app端调用微信SDK打开微信客户端,进行支付
⑤微信客户端向微信服务器发起支付请求并返回支付结果(它们之间交互用的是prepay_id这个参数)
⑥用户输入支付密码后,微信客户端提交支付授权,跟微信服务器交互,完成支付
⑦微信服务器给微信客户端发送支付结果提示,并异步给后台服务器发送支付结果通知
下面这个图就是微信支付的详细流程

下面就来说一下博主在集成微信支付的时候遇到的坑吧
1、调起微信客户端失败(进入微信客户端之后闪一下就回到自己的app)
这个问题的原因是比较多的,可以根据log日志来一一排查
①首先查看APP_ID、MCH_ID、是否正确
②查看微信开放平台创建应用时所填写的应用包名和应用签名是否正确(注意,签名要提供你打包时使用的keystore文件生成的签名,不会查看签名的小伙伴,这里微信官方提供了一个工具包名检查工具
③WXPayEntryActivity的创建于注册
微信有两个回调的activity,WXPayEntryActivity和WXEntryActivity,没错,这两个是不一样的,WXPayEntryActivity主要是处理微信支付的回调,WXEntryActivity则是处理其他功能的回调,博主当时在这里就将两个弄混了,下面放出WXPayEntryActivity的正确注册方法

<activity
   android:name=".wxapi.WXPayEntryActivity"
   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="wx000000000000"/>//这里要改
   </intent-filter>
</activity>

如果你上面这些都没有问题的话,那一般情况下应该就可以支付成功了,接下来就是回调的坑了

下面这个WXPayEntryActivity就是支付之后回调的activity

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{
    IWXAPI api;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pay_result);  

        //下面这两句很重要,如果没有将不能回调
        api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
        api.handleIntent(getIntent(),this);
    }

    @Override
    public void onReq(BaseReq baseReq) {
        Log.i("1","onReq");
    }

    @Override
    public void onResp(BaseResp baseResp) {
        //在这里处理支付之后的操作,我在这里使用EventBus通知到发起支付的界面
    EventBus.getDefault().post(new UserEvent.payWeixinEvent(baseResp.errCode));
        finish();
    }
}

下面是接收到通知之后的操作

    public void onEvent(UserEvent.payWeixinEvent event) {
        int code = event.getResultCode();
        if (code==0){
            //支付成功
            MyToast.showToast(this,"支付成功");
            setResult(RESULT_OK);
            finish();
        }else if (code==-1){
            //支付失败
            MyToast.showToast(this,"支付失败");
        }else if (code==-2){
            //取消支付
            MyToast.showToast(this,"取消支付");
        }
    }
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值