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中进行注册

 <!--微信支付-->
 <activity android:name=".wxapi.WXPayEntryActivity"
           android:exported="true"
           android:launchMode="singleTop"/>

最后推荐两几个我参考过的文档:

微信支付申请流程

微信支付签名的配置

微信支付步骤

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值