# 示例

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

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

image-20201223142034246

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

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

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

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

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

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

cloud 正常形式

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": "test-f0b102", // 云函数环境名称
    "functionName": "pay_cb" // 支付结果通知回调云函数名
  })
}

实例调用形式

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

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

  // 跨账号调用,必须等待 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": "test-f0b102", // 云函数环境名称
    "functionName": "pay_cb" // 支付结果通知回调云函数名
  })
}
点击咨询小助手