最新公告
  • 欢迎您光临三优资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 阿里云市场自动交付接入方案

    简介

    本文档描述了 SaaS 应用接入到云市场所须实现的接口定义,服务商通过提供以下接口,即可获得商品购买成功的信息,并将成功信息返回给云市场展示给用户。

    术语信息

    文中涉及相关术语解释如下:

    • 发货 URL: 由服务商开发,用于接受云市场实例相关消息的地址。
    • Token:由服务商提供,用于校验发货 URL 有效性。
    • openId:当服务商的应用接入腾讯云开放平台后,可获得的腾讯云用户的唯一标识。

    准备工作

    在一个 SaaS 商品正式通过审核上架前,服务商需要进行以下准备工作:

    1. 云市场发货接口开发(必选)。
    2. 控制台的参数配置(必选)。
    3. 接入腾讯云 OAuth(可选)。

    接口开发

    接口要求

    在进行接口开发前,请了解以下相关要求:

    项目 说明
    传输协议 仅支持 HTTPS 传输协议(443端口)
    提交方式 均采用 POST 方法提交
    数据格式 提交和响应均为 JSON 格式
    字符编码 统一使用 UTF-8 字符编码
    签名算法 SHA256
    签名要求 云市场的通知会使用签名
    请求超时时间 10s(为保证网络畅通,推荐接口层服务器使用腾讯云广州区域)

    服务商在控制台配置发货接口 URL 和 Token 后,云市场会以 URL PARAMS(GET 参数)的方式添加到接口 URL 上,携带的参数如下:

    参数 类型 说明
    signature String 加密签名, signature 结合了服务商填写的 Token 参数和请求中的 timestamp 参数、eventId 等参数。
    timestamp Integer UNIX 时间戳
    eventId Integer 随机数

    接口调试规则

    • 接口创建成功后需要进行对应的调试才可以发布接口,上架 SaaS 交付类商品。
    • 在服务商管理控制台的【在线接口调试】页面进行对应的接口调试,发布接口前必须将“创建实例”、“续费实例”、“实例过期”、“实例销毁”等接口调试成功,“实例配置变更”可选择性进行调试。
    • “创建实例”、“续费实例”、“实例过期”、“实例销毁”这个四个接口是必须调试通过的,如果未调试通过会影响商品正常的销售,如果商品没有试用版,则可跳过“实例配置变更”接口调试。

    签名规则

    服务商通过对 signature 进行校验(校验方式如下)。加密/校验流程如下:

    1. 判断 timestamp 是否已经超时(签名推荐超时为30s,免登校验推荐为120s)。
    2. 将 Token、timestamp、eventId 三个参数进行字典序排序。
    3. 将三个参数字符串,拼接成一个字符串进行 SHA256 加密。
    4. 服务商将加密后的字符串与 signature 对比即可。

    检验 signature 的 PHP 示例代码:

    function checkSignature($signature, $token, $timestamp, $eventId)
    {
      $currentTimestamp = time();
      if ($currentTimestamp - $timestamp > 30) {
        return false;
      }
      $timestamp = (string)$timestamp;
      $eventId = (string)$eventId;
      $params = array($token, $timestamp, $eventId);
      sort($params, SORT_STRING);
      $str = implode('', $params);
      $requestSignature = hash('sha256', $str);
      return $signature === $requestSignature;
    }

    接口验证过程

    身份校验接口

    • 接口名:verifyInterface。
    • 接口说明:用户在 云市场服务商管理控制台 更改发货 URL 和 Token 时,后台会调用接口 URL 对 Token 进行实时校验,校验通过才可以设置成功。

    请求参数说明

    参数名 类型 是否必须 描述
    action String verifyInterface
    requestId String 接口请求的 ID,来源于请求方请求的 ID,服务商是否判断请求 ID 根据服务商系统自身的需求
    echoback String 随机字符串

    响应参数说明

    参数名 类型 是否必须 描述
    echoback String 请求中的 echoback 参数的值

    请求示例

    curl -X POST -H 'Content-Type: application/json' 'http://isv/interface?signature=e3k9ierw&timestamp=1483944926&eventId=1780012140' --data '{"action":"verifyInterface","echoback":"Albert Einstein"}'

    响应示例

    {"echoback": "Albert Einstein"}

    实例创建通知接口

    • 接口名:createInstance。
    • 接口说明:用户购买商品并支付后,云市场将通过实例创建通知接口发送信息至发货 URL。

    请求参数说明

    参数名 类型 是否必须 描述
    action String createInstance
    orderId String 订单 ID
    accountId String 购买者账号 ID
    openId String 用户在腾讯云开放平台的标识,此标识对于同一服务商是相同的,对于不同服务商是不同的,长度为32位。如果没有接入开放平台,此字段为空
    productId Integer 云市场产品 ID
    requestId String 接口请求的 ID
    productInfo JSON 产品信息
    productInfo.productName String 购买的产品名称
    productInfo.isTrial Bool 是否为试用,true:是,false:否
    productInfo.spec String 产品规格,是试用时为空
    productInfo.timeSpan Integer 购买时长,是试用时为空
    productInfo.timeUnit String 购买时长单位(y、m、d、h、t 分别代表年、月、日、时、次),是试用时为空
    extendInfo JSON 支持 comment、templateId、ccnId 三个字段

    响应参数说明

    参数名 类型 是否必须 描述
    signId String 实例标识 ID,服务商提供的唯一标识。不可为空,长度最长为11位。当为”0″时,系统会认为是异步发货。
    appInfo JSON 应用信息
    appInfo.website String 可以为服务商的网站
    appInfo.authUrl String 服务商提供给客户的免登地址
    additionalInfo JSON 自定义数据,会显示在实例详情中。格式为[{"name":"","value":""}]

    请求示例

    curl -X POST -H 'Content-Type: application/json' 'http://isv/interface?signature=e3k9ierw&timestamp=1483944926&eventId=1780012140' --data '{"action":"createInstance","orderId":"20170109199524","accountId":"123545678"," openId ":"xz_D4XL_u7hKY5zt","productId":1024,"requestId":"fab8a029-22fa-41b1-ac08-5cdde878ed04","productInfo":{"productName":"云服务市场测试商品","isTrial":"false","spec":"普通版","timeSpan":2,"timeUnit":"m"}}'

    响应示例

    {"signId": "36441d902ba", "appInfo": {"website":"http://www.example.com", "authUrl": "http://www.example.com/oauth/login"},"additionalInfo":[{"name":"注意","value":"这是一条注意"},{"name":"说明","value":"这是说明"}]}

    实例续费通知接口

    接口名:renewInstance。
    接口说明:用户续费商品后,云市场将通过实例续费通知接口发送消息至发货 URL。该接口需要服务商立即返回响应。

    请求参数说明

    参数名 类型 是否必须 描述
    action String renewInstance
    orderId String 订单 ID
    accountId String 购买者账号 ID
    openId String 用户在腾讯云开放平台的标识,此标识对于同一服务商是相同的,对于不同服务商是不同的,长度为32位;如果没有接入开放平台,此字段为空
    productId Integer 云市场产品 ID
    requestId String 接口请求的 ID
    signId String 实例标识 ID
    instanceExpireTime DateTime 新的实例到期时间(yyyy-MM-dd HH:mm:ss)

    响应参数说明

    参数名 类型 是否必须 描述
    success String true/false

    请求示例

    curl -X POST -H 'Content-Type: application/json' 'http://isv/interface?signature=e3k9ierw&timestamp=1483944926&eventId=1780012140' --data '{"action":"renewInstance","orderId":"20170109199524","accountId":"123545678"," openId ":"xz_D4XL_u7hKY5zt","productId":1024,"requestId":"3c45e1f3-22b9-4346-9898-4467d3aea000","signId":"kjsadkjhdskjh3k"," instanceExpireTime":"2017-02-09 19:59:59"}'

    响应示例

    {"success":"true"}

    实例配置变更通知接口

    • 接口名:modifyInstance。
    • 接口说明:用户将实例从试用版转为正式版时,云市场将通过实例配置变更通知接口发送消息至发货 URL。
    注意:

    如果用户仅是配置变更,则参数中只会包含实例的新规格,而不会包含实例价格参数。

    请求参数说明

    参数名 类型 是否必须 描述
    action String modifyInstance
    orderId String 订单 ID
    accountId String 购买者账号 ID
    openId String 用户在腾讯云开放平台的标识,此标识对于同一服务商是相同的,对于不同服务商是不同的,长度为32位。如果没有接入开放平台,此字段为空
    productId Integer 云市场产品 ID
    requestId String 接口请求的 ID
    signId String 实例标识 ID
    spec String 实例新规格
    timeSpan Integer 购买时长,仅在试用版转为正式购买时传递
    timeUnit String 购买时长单位(y、m、d、h、t 分别代表年、月、日、时、次),是试用时为空
    instanceExpireTime Datetime 新的实例到期时间,仅在试用版转为正式购买时传递

    响应参数说明

    参数名 类型 是否必须 描述
    success String true/false
    appInfo JSON 新的应用信息
    appInfo.authUrl String 新的免登地址

    请求示例

    curl -X POST -H 'Content-Type: application/json' 'http://isv/interface?signature=e3k9ierw&timestamp=1483944926&eventId=1780012140' --data '{"action":"modifyInstance","orderId":"20170109199524","accountId":"123545678"," openId ":"xz_D4XL_u7hKY5zt","productId":1024,"requestId":"1d8326b2-9a94-4bf3-91ce-c7a94add99d3","signId":"kjsadkjhdskjh3k","spec":"  高级版","timeSpan":2,"timeUnit":"m"," instanceExpireTime":"2017-02-09 19:59:59" }'

    响应示例

    {"success":"true"}

    实例过期通知接口

    • 接口名:expireInstance。
    • 接口说明:实例到期后(用户最后操作后的 instanceExpireTime ),云市场将通过实例续费通知接口发送消息至发货 URL。

    请求参数说明

    参数名 类型 是否必须 描述
    action String expireInstance
    accountId String 购买者账号 ID
    openId String 用户在腾讯云开放平台的标识,此标识对于同一服务商是相同的,对于不同服务商是不同的,长度为32位。如果没有接入开放平台,此字段为空
    productId Integer 云市场产品 ID
    requestId String 接口请求的 ID
    signId String 实例标识 ID,服务商提供的唯一标识。长度最长为11位

    响应参数规范

    参数名 类型 是否必须 描述
    success String true/false

    请求示例

    curl -X POST 'http://isv/interface?signature=e3k9ierw&timestamp=1483944926&eventId=1780012140' --data '{"action":"expireInstance","accountId":"123545678"," openId ":"xz_D4XL_u7hKY5zt","productId":1024,"requestId":"ea372177-809d-4722-91d0-d6df4edf7bc9","signId":"kjsadkjhdskjh3k"}'

    响应示例

    {"success":"true"}

    实例销毁通知接口

    • 接口名:destroyInstance。
    • 接口说明:用户退款、实例到期后的七天内如果用户没有进行续费操作,云市场会销毁该实例并通过该接口发送消息至发货 URL。

    请求参数说明

    参数名 类型 是否必须 描述
    action String destroyInstance
    orderId String 客户退款的订单 ID
    accountId String 购买者账号 ID
    openId String 用户在腾讯云开放平台的标识,此标识对于同一服务商是相同的,对于不同服务商是不同的,长度为32位。如果没有接入开放平台,此字段为空
    productId Integer 云市场产品 ID
    requestId String 接口请求的 ID
    signId String 实例标识 ID,服务商提供的唯一标识。长度最长为11位

    响应参数说明

    参数名 类型 是否必须 描述
    success String true/false

    请求示例

    curl -X POST 'http://isv/interface?signature=e3k9ierw&timestamp=1483944926&eventId=1780012140' --data '{"action":"destroyInstance","orderId":"20170109199524","accountId":"123545678"," OpenID ":"xz_D4XL_u7hKY5zt","productId":1024,"requestId":"80b75030-6571-46a8-87ef-5b414f66dc39","signId":"kjsadkjhdskjh3k"}'

    响应示例

    {"success":"true"}

    参数配置

    在完成了相关开发后,服务商可登录 云市场服务商管理控制台,在【开发配置】> 【SaaS 接入设置】页面中,填写相关信息:

    注意:

    为保证数据的安全,发货 URL 必须为 HTTPS 协议,且发货 URL 不能包含查询字符串。如果配置保存失败,请检查 verifyInterface 接口是否正常。

    在线接口调试

    在接口开发过程中,您可以登录 云市场服务商管理控制台,在【开发配置】 > 【在线接口调试】中,可使用在线调试功能,用于模拟各种类型的发货行为。

    注意:

    此为调试环境,请勿使用正式环境的接口 URL 或数据库对接。

    接入腾讯云 OAuth

    为了提升用户使用 SaaS 产品的体验,建议服务商将应用接入腾讯云开放平台 OAuth ,实现用户在腾讯云控制台登录后,直接免登访问 SaaS 应用管理后台。

    申请接入开放平台

    由于腾讯云暂未开放申请腾讯云开放平台的入口,因此申请者需要先发邮件至:mqcloud@tencent.com 协助开通。邮件内容如下:

    • 腾讯云账户的 ID:您的账号 ID 可在 腾讯云控制台 总览页面右上角处查看。
    • 平台名称:平台名称会展示在授权页面。
    • 平台 Logo:建议尺寸:260 x 48,PNG 格式,Logo 将会展示在授权页面中。
    • 平台官网地址:您可以跳转到的第三方平台官网,即服务商的 SaaS 地址。
    • 平台回调地址:去掉 HTTP[s] 的域名部分,不能只是顶级域名,例如可以为api.example.com,而不允许为 example.com

    申请成功后您将会得到如下的信息:

    • AppId:第三方平台唯一标识。
    • AppSecretId/AppSecretKey :用来请求腾讯云 API 时的密钥对。
    • EncryKey:用来校验回调地址中带入的 code 参数。

    OAuth 接入说明

    账号打通
    云市场在发货通知中加入用户在腾讯云的标识 OpenID (对于不同服务商用户 OpenID 不同),服务商在获取到 OpenID 之后需要首先要查询该用户是否已与本地系统某个账户绑定,如果已经绑定,则直接处理发货逻辑;若未绑定,则应该在本地系统生成一个账号并与 OpenID 绑定。

    免登校验
    服务商对于发货的响应数据中应该返回一个authUrl,该 URL 最终会展示给用户。用户单击该 URL 后,服务商应该让用户登录到控制台以进行资源相关操作。

    授权流程说明
    服务商授权过程如下:

    1. 用户单击authUrl(假设为:http://example.com/qcloud/auth) 后,若未检测到用户登录,则跳转(302跳转)到:https://www.cloud.tencent.com/open/authorize?scope=login&app_id=123456789012&redirect_url=https%3A%2F%2Fexample.com%2Fapi%2Foauth%2Fqcloud%2Fcallback&state=1234。 其中app_id为申请 OAuth 后获得的第三方平台唯一标识redirect_url为提交腾讯云开放平台的平台回调地址域名
    2. 用户在腾讯云开放平台页面进行登录并且授权;
    3. 页面跳转回第三方网站地址redirect_url,并且带上参数 code 和 signature ,类似:https://example.com/api/oauth/qcloud/callback?code=04f82b0d6fcfc0c2d967d808e6010bd8&signature=eafc9653bd5c17c6adea55bb516ba8b9&state=123, 其中 signature = md5(code+EncryKey)
      说明:
      • 为了防止暴力破解,signature 参数对 code 的合法性做了一个校验。
      • 该code一次性有效,并且有效期为6分钟。
    4. 获取 code 并且校验合法之后,调用 code 校验接口,获取用户的以下信息:
      • userOpenId:用户在该第三方平台下的身份唯一标识。userOpenId即为用户在腾讯云的OpenID(不同第三方平台获取的标识不同)。
      • userUnionId:如果同一个腾讯云账户有多个第三方平台,用户在这些第三方平台的 userUnionId 一致。
      • userAccessToken:用户访问 Token。
      • expiresAt:用户访问 Token 过期时间(时间戳,当前时间 + 2小时)。
      • userRefreshToken:刷新 Token ,有效期为60天。

    code 校验接口

    1. 接口描述

    • 接口请求域名:open.tencentcloudapi.com
    • 接口说明:用于获取用户第三方开放平台的 access token

    2. 输入参数

    以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见 公共请求参数。该接口使用分配给第三方平台的密钥调用。

    参数名称 必选 类型 描述
    Action String 公共参数,本接口取值:GetUserAccessToken。
    Version String 公共参数,本接口取值:2018-12-25。
    Region String 公共参数,本接口不需要传递此参数。
    UserAuthCode String auth code

    3. 输出参数

    参数名称 类型 描述
    AppId String App ID
    UserOpenId String 第三方 openId
    UserUnionId String 第三方 unionId
    UserAccessToken String 第三方 access token
    ExpiresAt Integer 过期时间
    UserRefreshToken String refresh token
    Scope String 授权范围
    RequestId String 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。

    4. 示例

    • 输入示例:
      https://open.tencentcloudapi.com/?Action=GetUserAccessToken
      &UserAuthCode=testCode
      &<公共请求参数>
    • 输出示例:
      {
        "Response": {
            "AppId": "10******99",
            "UserOpenId": "391f920b807ecbaa38f7e77ef5260cd4",
            "UserUnionId": "438344612f5e181dbb76d2fcf2634a7b",
            "UserAccessToken": "a649830709416d07be8f0dba1c7675ce",
            "ExpiresAt": 1581670707,
            "UserRefreshToken": "607202ece53c20a8ad91fa3512fa8ac7",
            "Scope": "login",
            "RequestId": "5bc7a27e-ba54-4b68-b37e-aaee60a2c5e2"
        }
      }
    1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!3165260857@qq.com
    2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理,有奖励!
    3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
    4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!


    三优资源网 » 阿里云市场自动交付接入方案

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    三优资源网
    一个高级程序员模板开发平台

    发表评论

    • 157会员总数(位)
    • 1023资源总数(个)
    • 6本周发布(个)
    • 0 今日发布(个)
    • 484稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情