目录
1、微信第一次成功,后面都是回调失败
2、微信原生支付回调
3、汇聚,杉德小程序支付
4、支付宝支付
微信第一次成功,后面都是回调失败
1、清除微信缓存,清除微信存储空间,重新登录微信
2、如果有更换包名,有更换签名文件信息,清除编译器缓存clean Project 、Invalidate Caches/Restart,并确保包名,签名没错
微信原生支付回调
/**
* @date 创建时间:2020/7/2 0002
* @auther gaoxiaoxiong
* @Descriptiion 微信原生支付
**/
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private IWXAPI mWXApi;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mWXApi = WxApiUtils.getInstance().getmWXApi();
mWXApi.handleIntent(getIntent(),this);
}
@Override
public void onReq(BaseReq baseReq) {
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
mWXApi.handleIntent(intent,this);
}
@Override
public void onResp(BaseResp baseResp) {
if (baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {//微信结果返回
if (baseResp.errCode==0){//立即支付-输入密码-成功返回商家
支付成功
}else if (baseResp.errCode==-2){//调起微信,点击左上角的X。其它情况都不触发
取消支付
}else {//没有发现有情况会触发
支付失败
}
//Todo 可以发送广播,让其他页面进行轮训请求,是否真的成功。
}
overridePendingTransition(0, 0);
finish();
}
}
额外补充说一句,无论是否支付成功、失败,最好都是轮训请求后端进行一个验证操作。所以对结果是怎么样的,我们都可以不用关心
汇聚,杉德小程序支付
/**
* 微信分享,微信授权, 汇聚小程序支付成功失败回调
*/
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private IWXAPI mWXApi;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mWXApi = WxApiUtils.getInstance().getmWXApi();
mWXApi.handleIntent(getIntent(),this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
mWXApi.handleIntent(intent,this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mWXApi.handleIntent(data, this);
}
@Override
public void onReq(BaseReq baseReq) {
}
如果直接点击小程序的右边的关闭,是不会走onResp
@Override
public void onResp(BaseResp baseResp) {
Log.e("WXEntryActivity","支付回调");
Log.e("WXEntryActivity","baseResp.getType() =" + baseResp.getType());
if (baseResp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM){//杉德,汇聚小程序支付回调。用户点击返回商家按钮
WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) baseResp;
String extraData =launchMiniProResp.extMsg; // 对应JsApi navigateBackApplication中的extraData字段数据
/**
* 消费者支付成功返回 true,“返回商家”或其他操作返回 false
* 对接人员可根据此参数做相应的业务处理
//杉德下面逻辑无效,但是不会影响正常使用,所以这段代码,不要也罢
Intent messageIntent = new Intent(PAY_STATE_BROADCAST);
if("true".equalsIgnoreCase(extraData)){
支付成功"
}else {//出现密码框,点击X,返回商家。
支付失败
} */
}else if (baseResp instanceof SendAuth.Resp){//登录授权
switch (baseResp.errCode) {
case BaseResp.ErrCode.ERR_OK://授权成功
SendAuth.Resp resp = (SendAuth.Resp) baseResp;
break;
case BaseResp.ErrCode.ERR_USER_CANCEL://授权取消
case BaseResp.ErrCode.ERR_AUTH_DENIED://授权被拒绝
default://授权返回
this.finish();
break;
}
}
}
}
杉德小程序支付,汇聚小程序支付,当你取消支付,点击小程序右边的关闭圆圈的时候,WXEntryActivity 界面会自动消失,但不会走finish,onDestroy。所以要做检测是否真的成功或者是否支付完成,需要自行在吊起微信支付页面或者待确认界面进行轮训请求后台,确定是否支付成功。
杉德小程序支付、汇聚小程序支付点击返回商户会走onResp,也会走finish,onDestroy
支付宝支付
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(activity);
Map<String,String> result= alipay.payV2(jsonString, true);
Message msg = aliHandler.obtainMessage();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
aliHandler.sendMessage(msg);
}
};
Thread payThread = new Thread(payRunnable); //必须异步调用
payThread.start();
/**
* @date 创建时间:2020/6/18 0018
* @auther gaoxiaoxiong
* @Descriptiion 处理阿里支付类
**/
static class AliPayHandler extends Handler {
WeakReference<PayStateActivity> weakReference;
public AliPayHandler(PayStateActivity activity) {
weakReference = new WeakReference<PayStateActivity>(activity);
}
@Override
public void handleMessage(@NonNull Message msg) {
if (weakReference.get() != null) {
//Todo 自己逻辑
}
}
}
支付宝支付,不像微信一样,当你取消支付,支付成功,支付宝会帮你回调handleMessage,所以你需要在这里处理你自己的逻辑
总结
1、原生微信APP支付,只能回调WXPayEntryActivity
2、汇聚、杉德小程序支付只能回调WXEntryActivity ,点击返回商户会走onResp,也会走正常的完整生命周期。如果点击的是小程序的圆圈关闭是不会走onResp,也就没有了WXEntryActivity 完结的生命周期,当你切回原来自己APP界面的时候,是直接在你发起小程序支付的界面了。
网友评论