騰訊雲市場自動生產接口
自動生產流程圖
一、配置
1、對接騰訊雲必須是https 協議,這裏建議使用nginx搭建https環境,證書可以申請免費的ssl證書。
2、登錄騰訊雲->控制臺->服務商管理->開發->基本配置,配置以下參數
在提交時,騰訊雲會post一條請求信息,只要原樣輸出就可以完成配置。
二、驗證簽名
與服務商接口交互時,騰訊雲首先要求驗證簽名,驗證信息以url參數形式傳送。如
https://lhcms.***.***.cn/YunMarket/QcloudReq.aspx?eventId=1447906768×tamp=1529981569&signature=9054b319bc2f2dccaf919986289890f167a61b522306f6fbfe10cc3f1b20a8f3
1 /// <summary> 2 /// 驗證簽名 3 /// </summary> 4 /// <param name="timestamp"></param> 5 /// <param name="eventId"></param> 6 /// <param name="signature"></param> 7 /// <returns></returns> 8 publicstatic bool CheckSign(string timestamp, string eventId, string signature) 9 { 10 /* 11 * 1.將token、timestamp、eventid三個參數進行字典序排序 12 * 2.將三個參數字符串拼接成一個字符串進行sha256加密 13 */ 14 string str = string.Empty; //timestamp + eventId + token; //"1507604945342145759lianhua20170922am0917lq";15 16 Dictionary<string, string> dict = new Dictionary<string, string>(); 17 dict.Add("timestamp", timestamp); 18 dict.Add("eventId", eventId); 19 dict.Add("token", SinGooCMS.BLL.HostManager.Config.QcloudToken); 20 dict.OrderBy(p => p.Value); 21 22 foreach (var item in dict) 23 { 24 str += item.Value; 25 } 26 27 string localSign = SHA256Encrypt(str); //自己算出來的簽名 28 bool isok = string.Compare(signature, localSign) == 0; 29 log.Info("eventId:" + eventId + ",timestamp:" + timestamp + ",signature:" + signature + ",本地生成簽名:" + localSign + ",是否相等:" + isok.ToString()); 30 31 return isok; //相比較,看是否匹配 32 }
三、獲取post數據
騰訊雲post的數據需要用以下方式獲取,而不是request.Form
string reqForm = string.Empty; StreamReader reader = new StreamReader(Request.InputStream); reqForm = reader.ReadToEnd(); //獲取Form數據,全是json格式數據 reqForm = Server.UrlDecode(reqForm); //解碼
四、實例創建通知接口
post的數據如下:
/* { "orderId": "20180627157377", "openId": "5ada350a2cab11646cb900320e4e2485", "productId": 6367, "productInfo": { "productName": "雲智速建站模板", "isTrial": false, "spec": "入門版", "cycle": "1個月", "timeSpan": 1, "timeUnit": "m" }, "email": "[email protected]", "mobile": "13392171111", "action": "createInstance" } */
action表示需要的操作,timeUnit是時間單位,y表示年,m表示月。
獲取到了生產數據,按需求創建成品網站+附加數據庫+開通servu,並把免登地址等信息回復給騰訊雲。
var proInfo = jsonData["productInfo"]; //產品信息,必須有產品信息才能創建實例 if (proInfo != null) { //這是防止生成一個半成品網站,且沒有返回消息給雲市場,造成不斷請求,所以先刪除原來的半成品,再重新生成網站 //string uniqueId = req.OrderID + "_" + req.RequestID; string uniqueId = req.OrderID; if (BLL.IISSite.ExistsByOrder(uniqueId)) BLL.IISSite.DelSiteByOId(uniqueId); DateTime startDate = System.DateTime.Now.AddDays(1); //從明天開始算起 DateTime endDate = startDate; //到期的時間 string dateUnit = proInfo["timeUnit"].ToString(); //單位 年月天時,在這裏只以年月為準 int timeSpan = WebUtils.GetInt(proInfo["timeSpan"]); if (dateUnit.ToLower()=="y") // "timeSpan": 1,"timeUnit": "m" timeSpan = timeSpan * 12; //實際上的月份 endDate = startDate.AddMonths(timeSpan); QcloudMarketInstanceResponse rsp = BLL.QcloudMarket.CreateSite(req, startDate, endDate, timeSpan); //用於返回信息給阿裏雲市場 req.Status = rsp.signId == "0" ? 0 : 1; //成功的 req.BackResult = JsonUtils.ObjectToJson<QcloudMarketInstanceResponse>(rsp); }
需要返回給騰訊雲的數據結構如下
/// <summary> /// 騰訊雲創建實例返回的信息 /// </summary> public class QcloudMarketInstanceResponse : YunMarketResponse { /// <summary> /// 實例標識,服務商提供的唯一標識 /// </summary> public string signId { get; set; } /// <summary> /// 應用信息 /// </summary> public QcloudAppInfo appInfo { get; set; } /// <summary> /// 自定義數據,是一組json數據 如 [{"name":"","value":""},{}] /// </summary> public string additionalInfo { get; set; } }
騰訊雲收到上述返回數據後,認為服務商自動開通成功,並把免登信息等數據顯示給用戶。
通過登錄免登地址,應該可能查看到網站後臺賬戶和密碼,這樣用戶就能夠登錄後臺進行管理!
五、相關接口
createInstance 實例創建通知接口
renewInstance 實例續費通知接口
modifyInstance 實例配置變更通知接口
expireInstance 實例過期通知接口
destroyInstance 實例銷毀通知接口
附-雲市場軟件服務接入Saas商品自動交付接入方案v1.1
騰訊雲市場自動生產接口