-
Notifications
You must be signed in to change notification settings - Fork 28
接入微信SDK跳转微信小程序指南
hienaowork edited this page Jul 19, 2022
·
11 revisions
- 用户需前置接入微信SDK
- App开店SDK版本大于等于 7.2.5
在初始化SDK时,需要选择配置是否已接入微信Open SDK,isWxsdkIntegrated=true时会通过微信Open SDK的方式进行跳转和回跳,isWxsdkIntegrated=false则通过 URL Scheme的方式跳转,默认为false。
YouzanSDK.init(
context,
"client_id",
"appKey",
// 是否集成微信SDK,若为true,则会在微信支付时,跳转微信小程序进行支付
true,
new YouZanSDKX5Adapter());
在上述已配置通过微信Open SDK接入的方式下,用户在H5下单支付页面选择微信支付后,SDK会通过代理方法中 YouzanBrowser 的 AbsWxPayEvent 事件告知到开发者需要进行微信小程序的跳转,并且在response参数里携带对应跳转参数,示例代码如下:
YouzanBrowser().subscribe(new AbsWxPayEvent() {
/**
* 小程序调试类型
* 0: release
* 1: test
* 2: preview
* 参考 com.tencent.mm.opensdk.modelbiz.WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE、MINIPROGRAM_TYPE_TEST、MINIPROGRAM_TYPE_PREVIEW
*/
@Override
public void call(Context context, WxPayModel wxPayModel) {
Log.e(TAG, "AbsWxPayEvent:" + wxPayModel);
WeChatUtils.INSTANCE.jumpToWechat(YouzanActivity.this, wxPayModel.getAppId(), wxPayModel.getPath(), Integer.parseInt(wxPayModel.getMiniprogramType()));
}
});
/**
* 跳转微信小程序
*/
fun jumpToWechat(context: Context, appId: String, path: String, miniprogramType: Int) {
if (TextUtils.isEmpty(appId)) {
Toast.makeText(context, "小程序id为空,请检查!", Toast.LENGTH_SHORT).show()
return
}
// isWeiXinAvailable用于判断是否安装微信APP,请各自实现
if (isWeiXinAvailable(context)) {
// 此处wxd5735fxxxxxxxxxx请使用各自APP申请到的微信appId
val api = WXAPIFactory.createWXAPI(context, "wxd5735fxxxxxxxxxx")
val req = WXLaunchMiniProgram.Req()
req.userName = appId
if (!TextUtils.isEmpty(path)) {
req.path = path
}
req.miniprogramType = miniprogramType
api.sendReq(req)
} else {
Toast.makeText(context, "跳转失败,请先安装微信!", Toast.LENGTH_SHORT).show()
}
}
微信小程序处理支付完成以后会出现一个"返回商家"的按钮,点击后会触发微信SDK的WXEntryActivity.onResp()方法,可以在这里进行返回商家的处理,建议重新跳回店铺,并刷新支付结果页。
public class WXEntryActivity extends BaseActivity implements IWXAPIEventHandler {
@Override
public void onResp(BaseResp resp) {
if (resp != null) {
finish();
}
}
}
为了能返回原页面,需要检查下页面中WXEntryActivity 在manifest的声明:
在 manifest 文件里面加上exported、taskAffinity及 launchMode 属性,其中 exported 设置为true,taskAffinity设置为你的包名,launchMode设置为singleTask
下图为微信文档的示例供参考,原文链接:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/Android.html#jump2
<activity
android:name=".wxapi.WXEntryActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="true"
android:taskAffinity="填写你的包名"
android:launchMode="singleTask">
</activity>