腾讯云市场自动生产接口
Posted singoocms
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了腾讯云市场自动生产接口相关的知识,希望对你有一定的参考价值。
自动生产流程图
一、配置
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 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 实例销毁通知接口
以上是关于腾讯云市场自动生产接口的主要内容,如果未能解决你的问题,请参考以下文章