雲開發技巧
在雲開發技巧中,我們將向你介紹:
• 使用雲函數HTTP觸發器+雲調用實現無需後端接入支付寶支付功能,並通過雲函數接收支付回調功能;
• 使用雲函數定時觸發器實現每天凌晨定時調度任務。
使用雲函數HTTP觸發器實現支付回調
當開啟某一函數的 HTTP觸發功能後,只要使用 HTTP請求就可以訪問到函數,開發者需要關注業務安全和資源安全。
• 業務安全:開發者需在雲函數代碼中做好權限控制和安全防護,避免未授權訪問觸發敏感操作。
• 資源安全:雲函數開啟了 HTTP 訪問後,如果遇到大量惡意訪問,消耗雲函數資源,開發者可以將雲函數的觸發路徑設置為空或關掉該Space的HTTP觸發功能,停止HTTP觸發支持。
開啟雲函數HTTP觸發功能
• 新建用於處理支付回調邏輯的雲函數,上傳部署。
• 開啟Space的HTTP觸發功能調用接口 UpdateHttpTriggerConfig接口來開啟Space的HTTP觸發功能,注意需要設置EnableService為true。
系統會為開啟HTTP觸發功能的Space分配一個默認域名(DefaultEndpoint
),供HTTP觸發使用。
• 開啟雲函數的HTTP觸發功能調用接口 UpdateFunction接口來為雲函數設置HTTP觸發路徑HttpTriggerPath
,只有設置了觸發路徑的雲函數才能使用該功能。
• HTTP觸發函數執行訪問 https://${DefaultEndpoint}${HttpTriggerPath}
或http://${DefaultEndpoint}${HttpTriggerPath}
,即可觸發對應的雲函數執行。
• 介紹兩種調用UpdateHttpTriggerConfig和UpdateFunction的方式,一種是在阿里雲的API在線調試界面 https://help.aliyun.com/document_detail/158669.html 以及 https://help.aliyun.com/document_detail/153370.html 發起在線API調用。另外一種就是在代碼裡集成 @alicloud/pop-core,示例代碼如下:
const Core = require('@alicloud/pop-core');
var client = new Core({
accessKeyId: '你的accessKeyId',
accessKeySecret: '你的accessSecret',
endpoint: 'https://mpserverless.aliyuncs.com',
apiVersion: '2019-06-15'
});
var params = {
"RegionId": "cn-hangzhou",
"EnableService": true,
"SpaceId": "你的spaceid"
}
var requestOption = {
method: 'POST'
};
client.request('UpdateHttpTriggerConfig', params, requestOption).then((result) => {
console.log(JSON.stringify(result));
}, (ex) => {
console.log(ex);
})
雲調用調用支付接口,並使用雲函數的HTTP觸發路徑做為支付回調Url參數
- 在小程序項目的根目錄執行以下命令安裝 SDK。
npm install @alicloud/mpserverless-sdk --save
2.在 app.js 中初始化雲調用SDK(全局只需初始化一次),並將之前獲得的用於處理支付回調邏輯的雲函數的HTTP觸發路徑(暫時支持http協議格式路徑)作為初始化雲調用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: 'https://api.bspapp.com'
});
// 必須要初始化哦~cloud 是一個單例,初始化一次 App 引入均可生效
cloud.init(my.serverless,{
notify:"http://xxxxxx.bspapp.com/callbackForPay"//此處填寫您獲得的雲函數HTTP觸發路徑
});
其中每次調用UpdateFunction都會觸發雲函數的HTTP觸發路徑發生變化,發生變化之後務必記得更改雲調用SDK初始化裡的notify參數。
3.在小程序端使用雲調用調用支付能力。
//使用雲調用sdk調用支付創建接口
cloud.payment.common.create('iPhoneX', '2020053101122008', '5100.50', '2088xxxxx');
使用雲函數定時觸發實現定時調度任務
1.新建用於定時調度的雲函數,代碼編寫完後上傳部署。
2.調用UpdateFunction接口,通過設置參數TimingTriggerConfig來為雲函數設置定時觸發配置。
TimingTriggerConfig參數的值為一個cron表達式,例如cron:0 0 * * * *
表示每個整點觸發。配置規則僅支持設置cron表達式。
3.UpdateFunction接口的調用方式同樣有兩種,一種是在阿里雲的API在線調試界面 https://help.aliyun.com/document_detail/153370.html 發起在線API調用。另外一種就是在代碼裡集成 @alicloud/pop-core,示例代碼如下:
const Core = require('@alicloud/pop-core');
var client = new Core({
accessKeyId: '你的accessKeyId',
accessKeySecret: '你的accessSecret',
endpoint: 'https://mpserverless.aliyuncs.com',
apiVersion: '2019-06-15'
});
var params = {
"RegionId": "cn-hangzhou",
"Name": "你的雲函數名稱",
"SpaceId": "你的spaceid",
"TimingTriggerConfig": "1111"
}
var requestOption = {
method: 'POST'
};
client.request('UpdateFunction', params, requestOption).then((result) => {
console.log(JSON.stringify(result));
}, (ex) => {
console.log(ex);
})