1. 程式人生 > >騰訊雲市場自動生產接口

騰訊雲市場自動生產接口

odi enc 地址 action exp iso bool url 自定義

自動生產流程圖

技術分享圖片

一、配置

1、對接騰訊雲必須是https 協議,這裏建議使用nginx搭建https環境,證書可以申請免費的ssl證書。

2、登錄騰訊雲->控制臺->服務商管理->開發->基本配置,配置以下參數

技術分享圖片

在提交時,騰訊雲會post一條請求信息,只要原樣輸出就可以完成配置。

二、驗證簽名

與服務商接口交互時,騰訊雲首先要求驗證簽名,驗證信息以url參數形式傳送。如

https://lhcms.***.***.cn/YunMarket/QcloudReq.aspx?eventId=1447906768&timestamp=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         public
static 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

騰訊雲市場自動生產接口