打开微信小程序
APP端要能调起微信小程序,需要做简单的代码改造。 下面以安卓端开发为例作介绍:
- 项目配置
在微信移动应用开发平台配置好的包名下新建目录wxapi,并将WXEntryActivity拷贝到下面:
并将如下内容拷贝到AndroidManifest.xml
<activity
android:name=".wxapi.WXEntryActivity"
android:exported="true"
android:label="@string/app_name"
android:launchMode="singleTask"
android:taskAffinity="com.ikudot.frog">
</activity>
注:将包名改成自己的包名
- 创建订单并返回 业务系统需调用 订单预支付接口 并将返回值返回客户端APP,应用APP获取到token和唤起小程序的关键参数。
| 参数 | 说明 |
|---|---|
| appId | 小程序appId |
| originAppId | 小程序原始appId |
| path | 小程序打开路径 |
| token | 订单验证token |
- 封装RequestParamss启动WXEntryActivity RequestParams参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| appId | String | 移动应用AppId |
| miniProgramOriginId | String | 小程序原始appId |
| path | String | 小程序打开路径 |
| token | String | 订单验证token |
| notifyActivity | String | 支付结果回调Activity全类名 |
RequestParams requestParams = new RequestParams(result.getString("appId"),result.getString("originAppId"),result.getString("path"),result.getString("token"),"com.ikudot.frog.ResultActivity");
WXEntryActivity.actionStart(activity,requestParams);
- WXEntryActivity跳转小程序支付
WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req();
// 填小程序原始id
req.userName = requestParams.getMiniProgramOriginId();
//拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。
req.path = requestParams.getPath() + "?token=" + requestParams.getToken();
//req.miniprogramType = WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_TEST;// 可选打开 开发版,体验版和正式版
//req.miniprogramType = WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_PREVIEW;// 可选打开 开发版,体验版和正式版
req.miniprogramType = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE;// 可选打开 开发版,体验版和正式版
api.sendReq(req);
可选择跳转小程序开发版(MINIPROGRAM_TYPE_TEST),体验版(MINIPROGRAM_TYPE_PREVIEW),正式版(MINIPTOGRAM_TYPE_RELEASE),建议调试时跳转开发版或者体验版。
- 接收小程序回调结果
if (resp.getType() == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM)
{
WXLaunchMiniProgram.Resp launchMiniProResp = (WXLaunchMiniProgram.Resp) resp;
String extraData = launchMiniProResp.extMsg; //对应小程序组件 <button open-type="launchApp"> 中的 app-parameter 属性
Log.d(TAG, "onResp: " + extraData);
try
{
Class clazz = Class.forName(requestParams.getNotifyActivity());
Intent intent = new Intent(this, clazz);
intent.putExtra("response", extraData);
startActivity(intent);
finish();
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
Toast.makeText(this, "回调activity不存在,请检查全类名是否正确", Toast.LENGTH_SHORT).show();
finish();
}
}
支付小程序将回调一个字符串extraData给WxEntryActivity,值为"true"或"false" 标记此订单是否支付成功,然后WxEntryActivity将携带此参数启动指定接收回调结果的Activity。