# 对接说明

## 业务方使用小程序 API

> 业务流程路径：微信小程序-小程序首页-跳转 h5 页面-跳转小程序页面-调用 API

1. 打开另一个小程序

```js
import qs from "qs"; // 用于处理 url 参数

let callApi = "navigateToMiniProgram";
let apiOptions = {
  appId: "wxe5f52902cf4de896",
};
let path = "/pages/webview/callWxApi";
let query = {
  callApi, // 必填，小程序api名称，参照微信官方文档
  ...apiOptions, // 必填，小程序api所需参数，参照微信官方文档
};
let url = `${path}?${qs.stringify(query)}`; // 转成url参数形式，例如`/pages/payment/wxPay?api=xx&appId=xx`
wx.miniProgram.navigateTo({
  url: url,
});
```

## 业务方链接跳转

> 业务流程路径：微信小程序-小程序首页-跳转 h5 页面

> 小程序页面路径参数说明

```js
import qs from "qs"; // 用于处理 url 参数

let appid = "wxb24230254f5989b6"; // 小程序的 appid
let path = "/pages/home/index"; // 小程序的页面 path
let query = {
  url: "https://xxx", // 必填，业务方H5链接
  p: "th_zsdjh", // 必填，业务方标识，固定值
  lowPower: "1", // 选填，操作权限（需要白名单用户传 0，需要登录传 1，不需要登录传 2）
}; // 小程序的 query

// 如果query是string类型，则需要先对参数进行 encodeURIComponent 编码
let url = `${path}?${qs.stringify(query)}`; // 转成url参数形式，例如`/pages/home/index?url=https%3A%2F%2Fxxx&p=th_zsdjh&lowPower=1`
// 小程序完整路径跳转
wx.miniProgram.navigateTo({
  url: url,
});

// 示例一：跳转到百度搜索页面-搜索微信小程序
let path = "/pages/home/index"; // 小程序的页面 path
let query = {
  url: "https://www.baidu.com/s?wd=微信小程序",
  p: "unknow",
  lowPower: "1",
};
let url = `${path}?${qs.stringify(query)}`;
wx.miniProgram.navigateTo({
  url: url,
});
```

## 业务方使用原生地图选择位置（地图选点）

> 业务流程路径：微信小程序-点击服务-跳转 h5 页面-跳转小程序页面-选择位置

1. 跳转到小程序页面

```js
let path = "/pages/location/chooseLocation";
let query = {
  dealPage: "", // 选填，回跳地址
};
let url = `${path}?${qs.stringify(query)}`; // 转成url参数形式，例如`/pages/payment/wxPay?appId=xx&dealPage=xx`
wx.miniProgram.navigateTo({
  url: url,
});
```

2. 用户选择完位置后，页面回跳到业务方指定地址（dealPage），携带位置信息

示例：

```
https://superdesk.avic-s.com/super_cloud/wx/property/#/demo/userChooseLocation?code=SUCCESS&chooseLocation=22.71991%2C114.24779%2C%E5%B9%BF%E4%B8%9C%E7%9C%81%E6%B7%B1%E5%9C%B3%E5%B8%82
```

参数说明

```
{
  code: 'FAIL', // 必传，选择结果，取值：SUCCESS, FAIL
  chooseLocation: '', // 可选，位置信息，格式：latitude,longitude,address,name
}

```

3. 业务方 H5 页面接收到位置信息（chooseLocation），自行处理

```js
const url = window.location.href;
const urlParams = new URLSearchParams(url.split("?")[1]);
const locationParam = urlParams.get("chooseLocation");
const [latitude, longitude, address, name] = locationParam.split(",");
console.log(latitude, longitude, address, name);
```

相关：[小程序 打开地图选择位置](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.chooseLocation.html)

## 业务方获取位置信息-经纬度

> 业务流程路径：微信小程序-点击服务-地理位置授权成功/失败-跳转 h5 页面

小程序跳转到业务方 H5 页面，URL 上会携带参数 location，可以通过如下方式获取到经纬度（使用 gcj02 国测局坐标系）。

```js
const url = window.location.href;
const urlParams = new URLSearchParams(url.split("?")[1]);
const locationParam = urlParams.get("location");
const [latitude, longitude] = locationParam.split(",");
console.log(latitude, longitude);
```

相关：[小程序 获取当前的地理位置](https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.getLocation.html)

## 业务方分享 h5 页面链接（可协商）

> 业务流程路径：微信小程序-点击服务-跳转 h5 页面-在 h5 页面中引导用户触发分享

1. 在需要分享的页面触发分享时，调用如下接口，将分享内容发送给微信小程序。

```js
// 需在用户可能点击分享按钮前就先调用
wx.miniProgram.postMessage({
  data: {
    code: "th_zsdjh", // 业务方标识，固定值
    type: "share", // 消息类型，固定值
    url: h5Page, // 分享链接
    title: shareInfo.title, // 分享标题
    orgId: "615", // 指定小程序项目
    // ... 其他可选参数
  },
});
```

code, type, url 都是必传参数， title, imageUrl 都是可选参数。

| 参数     | 默认值         | 必填 | 说明                                                                                                                                         |
| -------- | -------------- | ---- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| url      |                | 是   | 分享链接                                                                                                                                     |
| title    | 默认小程序名称 | 否   | [分享标题，同小程序分享接口的参数](https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html#onShareAppMessage-Object-object) |
| imageUrl | 默认小程序截图 | 否   | [分享图片，同小程序分享接口的参数](https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html#onShareAppMessage-Object-object) |
| orgId    | 指定小程序项目 | 否   | 跳转指定项目，不传则是当前项目                                                                                                               |
