# mpInit模块

# Api域:

const mpInit = kreator.cookieHandler.mpInit;

将小程序webview向web页面提供的cookie参数种植到当前域名下的cookie中。

在小程序webview中,通常会存在由Web页面获取原生页面的登录态/定位信息/地址信息等等字段的场景,对于后端网关来说,这些字段在App内通常会通过header来获取,Web页面则通过Cookie获取。但是小程序webview与iOS的WKWebview,Android的X5WebView不同,客户端并不能在web端无感知的情况下主动将cookie植入到webview页面中。

因此我们通常会将这些字段拼接在url上,由web页面主动从url上解析获取,再放到接口的body参数体中传递,但这样又与目前网关的通用处理方式不同,导致后端解析参数时增加了工作量。

基于以上问题,mpinit函数会将url上的cookie字段获取下来,并一次性种植到当前web页面的cookie中。这一操作将会判断当前运行环境——仅有小程序环境会执行。同时如果检测到当前环境并不是小程序环境,但又有小程序环境种植的cookie,它将会清除所有上一次种植的cookie,避免小程序环境与浏览器环境的cookie互相冲突(例如,A页面先在微信小程序内访问,随后又在微信浏览器中访问的情况)。

// 执行mpInit方法将完成cookie种植操作
const cookieValue = mpInit();

alert(JSON.stringify(cookieValue));

// cookieValue为当前页面种植到域名下的所有cookie,为一对象结构
// 该函数执行之后,cookie已经完成种植。将它们返回的原因是为了方便您在业务开发中调试,查看当前小程序容器为web页面提供了哪些cookie字段,而不用再费事去抓包了。

当然,上述操作对于您的小程序webview逻辑是有一定要求的。需要保证webview需要传递给web端的cookie字段以JSONString的形式拼接在url上。目前多点大前端体系下的webview与Web端的交互已基本形成统一规范。

上述逻辑可以认为是一种小程序与web页面通讯的规范。如果您的小程序没有按照此种规范处理,kreator将不会主动处理cookie植入的操作,请在业务中自行完成处理。

目前,会被植入到web页面中的字段如下(与C端App尽可能保持统一):

const COOKIE_KEY_MAP = {
    TOKEN: 'token',
    AREA_ID: 'areaId',
    TICKET_NAME: 'ticketName',
    TICKET_WECHAT: 'ticketWeChat',
    CHANNEL: 'channel',
    STORE_ID: 'storeId',
    VENDER_ID: 'venderId',
    BUSINESS_CODE: 'businessCode',
    TICKET_LOGIN_ID: 'ticketLoginId',
    PLATFORM: 'platform',
    SOURCE: 'source',
    USER_ID: 'userId',
    DELIVERY_LAT: 'deliveryLat',
    DELIVERY_LNG: 'deliveryLng',
    LAT: 'lat',
    LNG: 'lng',
    DM_TENANT_ID: 'dmTenantId',
    STORE_GROUP_KEY: 'storeGroupKey',
    PLATFORM_STORE_GROUP_KEY: 'platformStoreGroupKey',
    VERSION: 'apiVersion',
    ORIGIN_BUSINESS_FORMAT: 'originBusinessFormat',
    TEMP_ID: 'tempid',
    DMALL_ENV_GROUP: 'dmall_envgroup',
    UUID: 'uuid',
};