要想在自己的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"/>
最后推荐两几个我参考过的文档: