近期微信『 小程序·雲開發 』悄悄的上線了一個叫做“雲調用”的新功能。
從文檔上看,雲調用是基於雲函數使用小程序開放接口的能力,在雲函數中使用雲調用來調用服務端接口,無需換取access_token,只要是在從小程序端觸發的雲函數中發起的雲調用都會經過微信自動鑒權,開發流程進一步從而進一步Serverless化。
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/functions/openapi.html
這是一個微信和騰訊雲團隊在『 小程序·雲開發 』解決方案中新打磨的功能點,目的應該是進一步降低開發門檻。
微信小程序雲調用上線后帶來哪些好處呢,我們結合場景來看下開發流程的變化:
場景:用戶提交訂單后,通過模板消息觸達用戶進行提示
雲調用支持前后發送模板消息流程對比
- 開發者服務端調API方式:
1.小程序上傳用戶formId到開發者服務端
2.服務端檢查access_token是否過期,過期調微信api獲取
3.服務端用formId調微信api發送模板消息
- 雲調用方式:
1.小程序調雲函數時傳formId, 存數據庫
2.雲函數從數據庫中取formId,調發送模板消息的api
模板消息雲調用,發送模板消息示例代碼如下:
const result = await cloud.openapi.templateMessage.send({
touser: cloud.getWXContext().OPENID, // 通過getWXContext 獲取OPENID
page: 'index',
data: {
},
templateId: 'TEMPLATE_ID',
formId: 'FORMID',
emphasisKeyword: 'keyword1.DATA'
})
對比雲調用支持前后發送模板消息的流程,不經過access_token的校驗去調微信api,讓開發更省事,假設微信的更多服務端接口均能支持這種方式,那小程序開發就更serverless化了。
場景:用戶進入客服界面咨詢
有在小程序開發中用過客服消息的同學,一定會對客服消息的雲調用能力推崇備至。下面看下雲調用支持前后客服消息流程的對比:
- 開發者服務端接收消息推送方式
1.開發者在小程序后台配置服務器URL,Token,消息密鑰等
2.開發者服務端驗證signature后接入會話
3.服務端進行消息接收與回復
這個流程偏復雜,用戶需要做服務配置, 校驗消息有效性,編寫業務邏輯回復消息這些操作,其中校驗消息(參數排序,加密,signature對比)及消息接收與回復(5s內響應微信服務器,微信服務器重試消息排重,回復消息格式)這些流程中涉及的問題較多,讓開發變的更麻煩。
- 雲調用方式
1.開發者在雲函數中填好消息推送配置
2.雲函數中取消息內容,調回復接口回復
開發者只需在小程序項目目錄下填寫配置如下:
{
"enable": true, // true 時開啟雲函數消息推送功能
"callbacks": [ // 所有雲函數消息配置
{
"msgType": 1, // 消息類型,客服消息為1
"functionName": "雲函數名", // 接收推送的雲函數名稱
"env": "環境ID" // 雲函數環境
}
]
}
當在雲函數的event參數中取到消息內容后,在雲函數中再調用發回復消息的接口(代碼如下),即可完成消息接收與回復啦
// 雲函數入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 雲函數入口函數
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
await cloud.openapi.customerServiceMessage.send({
touser: wxContext.OPENID,
msgtype: 'text',
text: {
content: '收到',
},
})
return 'success'
}
客服消息的雲調用能力是不是很牛x,再也不用檢驗signature后才能接入,不用處理重試消息與消息格式的問題,小程序用戶以后就會更少的投訴‘客服無法提供服務,請稍后重試’的問題了。
場景: 服務端獲取開放數據
在小程序開發過程中,開發者自己的服務端有時也需要獲取到小程序的開放數據,下面看看雲調用支持前后分別如何獲取開放數據:
- 開發者服務端校驗解密方式
1.獲取session_key放服務端
2.服務端signature校驗
3.獲取明文內容、敏感數據解密
如果有辦法能讓開發者不用再去面對獲取開放數據時,進行校驗和解密的工作,那就太爽了。而雲調用能力恰好解決了這個問題。
- 雲調用方式
1.小程序調開放能力接口獲取明文數據與敏感數據的cloudID
2.小程序調雲函數傳cloudID, 雲函數event中取cloudID對應的敏感數據
你只需要將敏感數據的 cloudId 傳給雲函數,它就能取到對應的敏感數據,校驗解密這些工作再也不會讓人煩惱了。
其他的雲調用開放能力如獲取留存,獲取小程序碼,校驗圖片或文本內安全這些能力也都很有用,想想以前檢查用戶圖片是否非法的流程,用戶需要先將文件上傳到服務端,服務端再調微信校驗接口檢查,現在可以直接調雲函數就可以完成檢查。其他的雲調用能力如下:
總結:通過雲開發的雲調用能力,可以讓開發者在簡單的場景下使用雲函數就能完成開發工作,但是一些重要的場景如微信支付,並沒有相關的開放能力,如果未來能用雲函數來代替開發者的商戶系統與微信服務交互,完成小程序支付功能的開發,那就更厲害了。所以希望未來能有更多,更重要的能力開放,使開發進一步Serverless化。