android微信支付详解与坑

来源:互联网 发布:protobuf js 编辑:程序博客网 时间:2024/06/07 00:20

要想在自己的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 1
原创粉丝点击