支付寶小程序Serverless 云調(diào)用的使用

2020-09-18 14:31 更新

云調(diào)用是基于小程序 Serverless 的云函數(shù)來使用支付寶小程序開放接口的能力,可以方便的讓開發(fā)者在小程序中和云函數(shù)中直接調(diào)用支付寶的后端開放接口,不需要關注服務端的相關配置,極大的減少了接入的流程,進一步降低了支付寶小程序的開發(fā)門檻。

目前云調(diào)用涵蓋了支付寶開放的基礎能力、營銷能力、會員能力、支付能力、安全能力和資金能力,以及阿里云開放的短信能力。

支持在小程序端云函數(shù)端調(diào)用云調(diào)用。

步驟一:開通云調(diào)用功能

完成以下操作,在小程序云控制臺開通云調(diào)用功能:

  1. 打開小程序云控制臺。

  1. 在導航欄選擇 擴展能力。

  1. 在擴展能力頁面,單擊 立即開通。

  1. 單擊前往 RAM 進行授權,然后單擊 同意授權 允許小程序訪問函數(shù)計算服務。開通0.png

  1. 返回擴展能力頁面,查看開通狀態(tài)。

擴展.jpg

步驟二:在云函數(shù)端或小程序端使用云調(diào)用

在云函數(shù)端使用

  1. 新建云函數(shù),在云函數(shù)代碼里直接使用ctx.cloud調(diào)用云調(diào)用相關API,無需引入依賴。

   // 云函數(shù)中使用云調(diào)用無需引入其他依賴,只需要使用ctx.cloud調(diào)用
   module.exports = async function (ctx) {
     const res = await ctx.cloud.payment.faceToFace.pay({
       // 參數(shù)接收自云函數(shù)調(diào)用端傳入的參數(shù)
       subject: ctx.args.subject,
       outTradeNo: ctx.args.outTradeNo,
       totalAmount: ctx.args.totalAmount,
       authCode: ctx.args.authCode
     });
     return res;
   };

在小程序端使用

1.在小程序項目的根目錄執(zhí)行以下命令安裝 SDK。

npm install @alicloud/mpserverless-sdk --save
npm install alipay-serverless-sdk --save

2.在 app.js 中初始化云調(diào)用 SDK(全局只需初始化一次)。

import MPServerless from '@alicloud/mpserverless-sdk';
import cloud from 'alipay-serverless-sdk';
my.serverless = my.serverless || new MPServerless({
  uploadFile: my.uploadFile,
  request: my.request,
  getAuthCode: my.getAuthCode,
}, {
  appId: '',
  spaceId: '',
  clientSecret: '',
  endpoint: ''});
cloud.init(my.serverless);

其中:

  • appId 是小程序的 ID。您可以在支付寶小程序控制臺獲得。
  • spaceId、clientSecret 和 endpoint 在小程序 Serverless 控制臺創(chuàng)建服務空間后可以獲得。

3.在想要使用 SDK 的頁面導入 alipay-serverless-sdk 即可使用。

import cloud from 'alipay-serverless-sdk';
const res = await cloud.base.qrcode.create({
    urlParam: 'pages/index/index',
    describe: '我的二維碼描述',
    queryParam: 'key=value'
  });

云調(diào)用能力接口說明

云調(diào)用SDK提供了基礎能力、營銷能力、會員能力、支付能力、安全能力和資金能力以及通用調(diào)用能力的接口調(diào)用,只需要開通云調(diào)用,你就能在小程序端和云函數(shù)端快捷的調(diào)用各類接口。

基礎能力

  • 用戶授權
    • 獲取授權訪問令牌 cloud.base.oauth.getToken
    • 刷新授權訪問令牌 cloud.base.oauth.refreshToken

在云函數(shù)端調(diào)用

module.exports = async function (ctx) {
  const res = await ctx.cloud.base.oauth.getToken({
    // code參數(shù)接收自云函數(shù)調(diào)用處傳入的參數(shù)
    code: ctx.args.authCode
  });
  return res;
};

在小程序端調(diào)用

import cloud from 'alipay-serverless-sdk';
const res = await cloud.base.oauth.getToken({
    code: 'Your authcode'
  });
  • 小程序二維碼
    • 創(chuàng)建小程序二維碼 cloud.base.qrcode.create

在云函數(shù)端調(diào)用

// 云函數(shù)中使用云調(diào)用無需引入其他依賴,只需要使用ctx.cloud調(diào)用
module.exports = async function (ctx) {
  const res = await ctx.cloud.base.qrcode.create({
    urlParam: 'pages/index/index',
    describe: '我的二維碼描述',
    queryParam: 'key=value'  });
  return res;
};

在小程序端調(diào)用

const res = await cloud.base.qrcode.create({
    urlParam: 'pages/index/index',
    describe: '我的二維碼描述',
    queryParam: 'key=value'
  });

營銷能力

  • 小程序模板消息
    • 發(fā)送模板消息 cloud.marketing.templateMessage.send

在云函數(shù)端調(diào)用

// 云函數(shù)中使用云調(diào)用無需引入其他依賴,只需要使用ctx.cloud調(diào)用
module.exports = async function (ctx) {
  const res = await ctx.cloud.marketing.templateMessage.send({
    // 參數(shù)接收自云函數(shù)調(diào)用端傳入的參數(shù)
    toUserId: ctx.args.toUserId,
    formId: ctx.args.formId,
    page: ctx.args.page,
    data: ctx.args.data,
    userTemplateId: ctx.args.userTemplateId  });
  return res;
};

在小程序端調(diào)用

const res = await cloud.marketing.templateMessage.send({
    // 參數(shù)接收自云函數(shù)調(diào)用端傳入的參數(shù)
    toUserId: '2088102122458832',
    formId: '2017010100000000580012345',
    page: 'page/component/index',
    data: '{"keyword1": {"value" : "12:00"}}',
    userTemplateId: 'MDI4YzIxMDE2M2I5YTQzYjUxNWE4MjA4NmU1MTIyYmM='  });

資金能力

  • 無密轉(zhuǎn)賬到支付寶賬號
    • 單筆轉(zhuǎn)賬 cloud.fund.transferAccount.transfer

在云函數(shù)端調(diào)用

// 云函數(shù)中使用云調(diào)用無需引入其他依賴,只需要使用ctx.cloud調(diào)用
module.exports = async function (ctx) {
  var payee = new Object({
     identity: cctx.args.identity,
     identity_type: 'ALIPAY_USER_ID'  });
  const res = await ctx.cloud.fund.transferAccount.transfer({
    // 參數(shù)接收自云函數(shù)調(diào)用端傳入的參數(shù)
    outBizNo: ctx.args.outBizNo,
    transAmount: ctx.args.transAmount,
    payeeInfo: payee,
    orderTitle: ctx.args.orderTitle
  });
  return res;
};

在小程序端調(diào)用

const res = await cloud.fund.transferAccount.transfer({
    outBizNo: '2077353455543433',
    transAmount: '0.01',
    payee: payeeInfo,
    orderTitle: '測試'
  });

支付能力

  • 當面付
    • 當面付交易付款 cloud.payment.faceToFace.pay

在云函數(shù)端調(diào)用

// 云函數(shù)中使用云調(diào)用無需引入其他依賴,只需要使用ctx.cloud調(diào)用
module.exports = async function (ctx) {
  const res = await ctx.cloud.payment.faceToFace.pay({
    // 參數(shù)接收自云函數(shù)調(diào)用端傳入的參數(shù)
    subject: ctx.args.subject,
    outTradeNo: ctx.args.outTradeNo,
    totalAmount: ctx.args.totalAmount,
    authCode: ctx.args.authCode
  });
  return res;
};

在小程序端調(diào)用

const payRes = await cloud.payment.faceToFace.pay({
    subject: '小程序Serverless支付測試',
    outTradeNo: "demo" + new Date().getTime(),
    totalAmount: '0.01',
    authCode: '286532211313197763'
  });

說明:更多云調(diào)用支持的開放能力見可以使用支付寶掃碼登陸官方小程序云開發(fā)助手,在 學習 > 云調(diào)用 SDK 文檔 學習更多云調(diào)用開放能力的使用。

推廣碼.jpg

同時我們提供了調(diào)用支付寶開放能力的通用云調(diào)用接口,滿足您的開發(fā)需要。

var exchangeUseParams = new Object({
  user_id: 2088xxxxxx',  voucher_id: '2020132xxxxxxx',
  out_biz_no: 'xxxxxx' });
const res = await cloud.util.generic.execute('alipay.marketing.exchangevoucher.use', 
      exchangeUseParams);

云調(diào)用模板工程

打開小程序 IDE 工具,點擊 模板選取云與開放能力,選擇 Serverless 支付寶能力地圖 demo。

云調(diào)用demo.jpg

開發(fā)者技術支持群

加入支付寶小程序 Serverless 開發(fā)者群參與討論,釘釘搜索群號:21922182,或使用釘釘掃描二維碼加入。

?image

支付寶掃描以下二維碼登陸官方小程序【小程序云開發(fā)助手】,獲取更多云開發(fā)教程以及在線體驗云調(diào)用的開放能力。

?推廣碼.jpg

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號