小程序嵌入(web-view 免登录接入)
把 24好玩 H5 活动嵌入你的微信小程序:用小程序
web-view组件加载拼接了用户身份与签名 token 的活动 URL,玩家以小程序现有会员身份直接进入活动并完成抽奖/发奖,无需再次登录。分享抽奖等依赖公众号回调的功能,通过小程序侧上报/game/v2/shareGameCallback补齐。
开通与额度
嵌入小程序属会员方案能力:高级年费会员与 OEM 已含 1 个名额,普通年费会员可选支持,单次升级不支持。所需 appid/appsecret 在工作台"嵌入 APP"处查看。
一、接入机制
小程序内做游戏入口(banner/按钮,或自建游戏中心列表页),点击跳转到承载页,用 web-view 加载游戏地址:
<web-view src="游戏地址"></web-view>
游戏地址 = 活动原始 URL(形如 https://gmXXXX.ssl.minihaowan.com/web/game/game_id/{game_id})+ 身份参数 + token。
URL 参数
| 参数 | 类型 | 必选 | 说明 |
|---|---|---|---|
game_id |
String | 是 | 活动 ID |
appid |
String | 是 | 24好玩分配的第三方 APPID |
timestamp |
Number | 是 | 10 位秒级时间戳 |
token |
String | 是 | 登录 token,算法见下 |
uid |
String | 是 | 第三方用户 ID(会员 ID) |
nickname |
String | 否 | 第三方用户名称 |
headimgurl |
String | 否 | 第三方用户头像 |
is_new |
String | 否 | 是否新注册用户(1 是 / 0 否) |
is_from_app |
Number | 是 | 固定填 1(从 APP 进入) |
两种场景都需要拼接身份:(1) 用户从小程序入口进入;(2) 用户从小程序分享卡片进入(拼接当前用户自己的身份)。
token 生成算法(精确配方)
- 取不含
token的全部参数组成参数数组request_params; - 按参数名 ASCII 升序排列(PHP 即
ksort); - 将排序后各参数的值(不含 key)依次拼接成
str1; str2 = str1 + appsecret(24好玩分配的密钥直接追加在末尾);token = md5(str2)(小写十六进制)。
$request_params = ["game_id"=>1234, "appid"=>888, "timestamp"=>1520249212,
"uid"=>"1a2b3c", "nickname"=>"test"];
ksort($request_params);
$str = '';
foreach ($request_params as $key => $value) { $str .= $value; }
$str .= $appsecret;
$token = md5($str);
注意:nickname/headimgurl 若参与签名,先以原值计算 md5,之后再对 URL 中的值做 urlencode。
二、分享功能
小程序内的分享拿不到公众号 JSSDK 的分享回调,需要两件事配合:
1. postMessage 更新分享配置
H5 活动端在页面加载及分享信息变动时(提交分数、发起助力等),调用 wx.miniProgram.postMessage 下发分享数据;小程序承载页用 bindmessage 收集,在 onShareAppMessage 中取最后一条 postType === 'share' 的数据组装返回:
<web-view src="{{src}}" bindmessage="onMessage"></web-view>
postMessage 数据结构:postType: 'share';userInfo: {appid, appuid}(用于生成 token);shareInfo: {shareTitle, shareLogo, shareUrl};gameInfo: {game_id, scene, key, cd_id, id, from_user, video_id}(scene/key/cd_id/id/video_id 视活动配置与模板类型存在)。
要点:shareUrl 为分享入口地址(小程序页则填小程序页面地址)且需 encodeURIComponent;微信 JSSDK 版本 不低于 1.3.2;工作台禁用分享时 postMessage 返回 {},需做兼容。
2. 分享事件回调 /game/v2/shareGameCallback
小程序在用户实际分享时,把分享事件上报给平台以驱动分享送次数等功能:
- 域名:当前游戏嵌入域名;
POST,content-type: application/x-www-form-urlencoded。 - 参数:
game_id、appid(工作台-嵌入 APP 可见)、uid(第三方会员 ID)、video_id(如存在)、token。 - 签名与上文同配方:参数 ksort 后拼值 + appsecret,md5 小写。例:
game_id=449707668, appid=65954, uid=7196, appsecret=test-app→ 拼串659544497076687196test-app→d41a92c80be58253303fd0b25e4cf234。 - 返回:
{code:0, msg:"ok"};错误码-1failed、-2param error、-3uid error、-4appid error、-5game_id error、-6no share record、-7game over、-8token error。
三、代理商游戏列表接口(仅渠道代理商)
自建游戏中心列表页时可用(platform_id 由 24好玩提供):
| 接口 | 方式 | 用途 |
|---|---|---|
/open/InternalService/gameList |
GET | 按代理商查游戏列表(参数 platform_id、page、page_size、search_type=uid、search_value=门店登录账号);返回 game_id/名称/状态/起止时间/参与与浏览统计/platform_key 等 |
/open/InternalService/userList |
GET | 按代理商查平台用户列表(search_value 传 gameList 返回的 platform_key);返回 user_id/账户类型/游戏数/appid/appsecret 等 |
四、域名要求
web-view加载的游戏域名需配置进小程序业务域名;- webview 中 iframe 的域名同样要加入域名白名单(活动内嵌 iframe 时易漏)。