腾讯云市场自动生产接口

 自动生产流程图

一、配置

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

猜你喜欢

转载自www.cnblogs.com/singoocms/p/9235351.html