Android 支付宝支付,微信支付,官方文档接入

调起支付:orderInfo就是那个超长字符串

fun toAliPay(activity: AppCompatActivity, orderInfo: String, mHandler: Handler, flag: Int) {

val payRunnable = Runnable {

val alipay = PayTask(activity)

val result = alipay.payV2(orderInfo, true)

//发送给handle

val msg = Message()

msg.what = flag

msg.obj = result

mHandler.sendMessage(msg)

}

// 必须异步调用

val payThread = Thread(payRunnable)

payThread.start()

}

这样就OK了,支付完成还有个回调,解析handle发出去的result参数即可,

code = 9000代表支付成功,其他失败

2.如果你的项目是APP嵌套的H5商城需要调起支付宝,那么有2个方案:

方案一:H5拿到那个超长字符串给APP,APP去调起支付宝,同上

方案二:H5直接调起支付宝,无需上面那串字符串。(前提是你的H5商城已经实现了支付宝支付,也就是说在系统浏览器可以调起支付宝支付)

下面我们说下方案二:

核心代码:

private class MyWebViewClient extends WebViewClient {

@Override

public boolean shouldOverrideUrlLoading(final WebView view, String url) {

if (!(url.startsWith(“http”) || url.startsWith(“https”))) {

return true;

}

/**

  • 推荐采用的新的二合一接口(payInterceptorWithUrl),只需调用一次

*/

final PayTask task = new PayTask(H5PayDemoActivity.this);

boolean isIntercepted = task.payInterceptorWithUrl(url, true, new H5PayCallback() {

@Override

public void onPayResult(final H5PayResultModel result) {

final String url = result.getReturnUrl();

if (!TextUtils.isEmpty(url)) {

H5PayDemoActivity.this.runOnUiThread(new Runnable() {

@Override

public void run() {

view.loadUrl(url);

}

});

}

}

});

/**

  • 判断是否成功拦截

  • 若成功拦截,则无需继续加载该URL;否则继续加载

*/

if (!isIntercepted) {

view.loadUrl(url);

}

return true;

}

}

mWebView.setWebViewClient(new MyWebViewClient());

这里拦截到H5的支付即可调起支付宝支付,当然也是需要aar包的

这里记得不要修改WebView的userAgent,不然shouldOverrideUrlLoading不会回调,那么自然也不会拦截到了。

2、微信


这里首先肯定是申请好微信支付功能和商户ID等等信息,然后给到后台配置。

微信和支付宝一样也有2种方式,也可以H5中调起,但是我一直没测成功,修改了refer还是没成功,所以这里只说原生调起微信支付

第一步:导入包依赖

api ‘com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+’

第二步:调起微信支付(这些参数后台会返回给客户端)

fun toWechatPay(context: Context, wxPayBean: Pay.WxpayBean) {

val api = WXAPIFactory.createWXAPI(context, wxPayBean.appid)

api.registerApp(wxPayBean.appid)

//这里的bean,是服务器返回的json生成的bean

val payRequest = PayReq()

payRequest.appId = wxPayBean.appid

payRequest.partnerId = wxPayBean.partnerid

payRequest.prepayId = wxPayBean.prepayid

payRequest.packageValue = “Sign=WXPay”//固定值

payRequest.nonceStr = wxPayBean.noncestr

payRequest.timeStamp = wxPayBean.timestamp.toString()

payRequest.sign = wxPayBean.sign

//发起请求,调起微信前去支付

api.sendReq(payRequest)

}

public static class WxpayBean {

private String appid;

private String partnerid;

private String prepayid;

private String noncestr;

private long timestamp;

@SerializedName(“package”)

private String packageX;

private String sign;

}

这样就可以调起支付了,接下来就是支付完成之后的回调了,微信的回调必须在你的项目包名下创建一个包名.wxapi的包名,然后把WXPayEntryActivity放入即可,

微信测试支付参数:

https://wxpay.wxutil.com/pub_v2/app/app_pay.php

这里要注意,如果你是一个包名,然后想通过不同的渠道去打包多个不同的APP,那么可以在AndroidManifest中配置一下activity-alias 别名的方式解决,(其他,比如人脸识别,分享等等需要包名一致的都可以通过此方式解决)否则将会收不到回调

如下配置即可(applicationId为build.gradle中的productFlavors的applicationId):

<activity

android:name=“.wxapi.WXPayEntryActivity”

android:exported=“true”

android:launchMode=“singleTop” />

<activity-alias

android:name=“${applicationId}.wxapi.WXPayEntryActivity”

android:exported=“true”

android:targetActivity=“.wxapi.WXPayEntryActivity”/>

下面是回调代码:

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {

private IWXAPI api;

private String app_id = “wx88888888888”;//微信开发后台申请的app_id

设计模式学习笔记

设计模式系列学习视频

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

nb-1714322490223)]

设计模式系列学习视频

[外链图片转存中…(img-xKewfwLi-1714322490223)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值