# 示例

本示例基于被共享环境的小程序视角，以如何调用云函数进行展示。

小程序 A 将云环境 a 共享给小程序 B 后，小程序 B 基于被授权的情况下进入云环境 a，创建了属于小程序 B 的一个云函数 test；

![image-20201223142034246](https://res8.wxqcloud.qq.com.cn/wxdoc/1d00538a-bbf4-4b10-aba0-56f1a664b375.png)

在云函数中使用与在小程序中并没有多少区别（需 `wx-server-sdk` 版本大于或等于 `2.3.0`）：

```js
const cloud = require('wx-server-sdk')

exports.main = async (event) => {
  // 声明新的 cloud 实例
  var c1 = new cloud.Cloud({
    // 资源方 AppID
    resourceAppid: 'wxe0e2656d74f0bff3',
    // 资源方环境 ID
    resourceEnv: '环境ID',
  })

  // 跨账号调用，必须等待 init 完成
  // init 过程中，资源方小程序对应环境下的 cloudbase_auth 函数会被调用，并需返回协议字段（见下）来确认允许访问、并可自定义安全规则
  await c1.init()

  // 完成后正常使用资源方的已授权的云资源
  return c1.callFunction({
    name: '函数名',
    data: {},
  })
}
```

如果有些云调用能力，需要指定发起方 appid，可以在云调用之前传入调用方 `appid`

cloud 正常形式

``` js
const cloud = require('wx-server-sdk')

exports.main = async (event) => {
  // 初始化
  cloud.init({
    env: cloud.DYNAMIC_CURRENT_ENV
  })

  // 使用使用方小程序（非资源方）身份发起支付
  return cloud.cloudPay({ appid: '发起支付的小程序appid' }).unifiedOrder({
    "body" : "小秋TIT店-超市", // 商品描述
    "outTradeNo" : "1217752501201407033233368018", // 商户订单号
    "spbillCreateIp" : "请传入终端 ip 地址，支持 ipv6", // 终端 IP
    "subMchId" : "1900009231", // 商户号
    "totalFee" : 1, // 总金额
    "envId": "环境ID", // 云函数环境名称
    "functionName": "pay_cb" // 支付结果通知回调云函数名
  })
}
```

实例调用形式

``` js
const cloud = require('wx-server-sdk')

exports.main = async (event) => {
  // 声明新的 cloud 实例
  var c1 = new cloud.Cloud({
    // 资源方 AppID
    resourceAppid: 'wxe0e2656d74f0bff3',
    // 资源方环境 ID
    resourceEnv: '环境ID',
  })

  // 跨账号调用，必须等待 init 完成
  // init 过程中，资源方小程序对应环境下的 cloudbase_auth 函数会被调用，并需返回协议字段（见下）来确认允许访问、并可自定义安全规则
  await c1.init()

  // 完成后正常使用资源方的已授权的云资源，
  return c1.cloudPay({ appid: '发起支付的小程序appid' }).unifiedOrder({
    "body" : "小秋TIT店-超市", // 商品描述
    "outTradeNo" : "1217752501201407033233368018", // 商户订单号
    "spbillCreateIp" : "请传入终端 ip 地址，支持 ipv6", // 终端 IP
    "subMchId" : "1900009231", // 商户号
    "totalFee" : 1, // 总金额
    "envId": "环境ID", // 云函数环境名称
    "functionName": "pay_cb" // 支付结果通知回调云函数名
  })
}
```
