Skip to content

第三方平台在没有使用微信云托管的情况下,需要自行加解密获取凭证,RsCode.WeChat提供了第三方平台常用的API

常用API

获取ComponentAccessToken

自定义处理消息事件类,重写WeChatEventHandler.OnComponentVerifyTicketEvent(),并添加至service容器中

ticket缓存 key=component_verify_ticket-{componentAppId}

调用IWechatTokenManager.GetComponentTokenAsync(string componentAppId),得到componentAccessToken

例子:

csharp
public class CustomWxMsgHandler : WeChatEventHandler
{
     public override async Task<string> OnComponentVerifyTicketEvent(ThirdPlatformMessage data)
     {
         var key = $"component_verify_ticket-{data.AppId}";
         await cache.SetAsync(key,data,DateTime.Now.AddHours(11));
         return "success";
     }
}
csharp
 services.AddScoped<IWeChatEventHandler, CustomWxMsgHandler>();
csharp
var componentAccessToken=WechatTokenManager.GetComponentTokenAsync(componentAppId);
  1. 获取预授权码

    csharp
    IWechatTokenManager.GetPreAuthCodeAsync(string componentAppId, string componentAccessToken);

    得到 PreAuthCode

    该接口用于获取预授权码(pre_auth_code)是第三方平台方实现授权托管的必备信息,每个预授权码有效期为 1800秒。

  2. 获取授权帐号调用令牌

    csharp
    wechat.SendAsync<AuthorizerAccessTokenResponse>(new AuthorizerAccessTokenRequest(componentAccessToken,componentAppId, authorizerAppId, authorizerRefreshToken))

    该接口用于获取授权帐号的authorizer_access_token。authorizer_access_token 有效期为 2 小时,authorizer_access_token 失效时,可以使用 authorizer_refresh_token 获取新的 authorizer_access_token。

  3. 获取刷新令牌

    csharp
    wechat.SendAsync<AuthorizerRefreshTokenResponse>(new AuthorizerRefreshTokenRequest(componentAccessToken,componentAppId, authorizationCode))
    • 当用户在第三方平台授权页中完成授权流程后,第三方平台开发者可以在回调 URI 中通过 URL 参数获取授权码(authorization_code)。然后使用该接口可以换取公众号/小程序的刷新令牌(authorizer_refresh_token)。

    官方文档

代商家注册小程序API

csharp
//快速注册企业小程序
wechat.SendAsync<RegisterWeAppResponse>(new RegisterWeAppRequest());
//查询企业小程序注册任务状态
wechat.SendAsync<QueryWeAppStatusResponse>(new QueryWeAppStatusRequest());
//复用公众号注册小程序
wechat.SendAsync<RegisterByOffiaccountResponse>(new RegisterByOffiaccountRequest());
//快速注册个人小程序
wechat.SendAsync<RegisterPersonalWeAppResponse>(new RegisterPersonalWeAppRequest());
//查询个人小程序注册任务状态
wechat.SendAsync<QueryPersonalWeAppResponse>(new QueryPersonalWeAppRequest());
//修改试用小程序名称
wechat.SendAsync<ModifyBetaMiniprogramNickNameResponse>(new ModifyBetaMiniprogramNickNameRequest());
//试用小程序快速认证
wechat.SendAsync<VerfifyBetaMiniprogramResponse>(new VerfifyBetaMiniprogramRequest());
//注册试用小程序
wechat.SendAsync<RegisterBetaMiniprogramResponse>(new RegisterBetaMiniprogramRequest());
//代公众号获取accesstoken
wechat.SendAsync<AssistAccessTokenResponse>(new AssistAccessTokenRequest());
//代公众号刷新accesstoken
wechat.SendAsync<AssistRefreshTokenResponse>(new AssistRefreshTokenRequest());

注册审核事件推送

csharp
Task<string>OnNotifyThirdFasteregisterEvent(ThirdFasteRegisterNotifyData data);

可查阅官方代商家注册小程序API

复用公众号资质注册小程序,需要 代公众号发起网页授权

scope参数 已微信认证的服务号拥有 snsapi_basesnsapi_userinfo权限,两者区别

  1. 以snsapi_base为 scope 发起的网页授权,是用来获取进入页面的用户的 openid 的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
  2. 以snsapi_userinfo为 scope 发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
  3. 用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户 OpenID 来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的

代商家注册小程序实例:

复用公众号资质快速注册小程序

复用公众号资质快速注册小程序 介绍接口文档

实战开发步骤:

  1. 公众号管理员授权第三方平台

    通过自建授权链接,公众号管理员授权后,可以得到authorizer_access_token appid等信息

    自建授权链接参数说明

    参数必填说明
    component_appid第三方平台方 appid
    pre_auth_code预授权码
    redirect_uri- 授权回调 URI(填写格式为https://xxx)。(插件版无该参数) - 管理员授权确认之后会自动跳转进入回调 URI,并在 URL 参数中返回授权码和过期时间(redirect_url?auth_code=xxx&expires_in=600)
    auth_type- 要授权的帐号类型,即商家点击授权链接或者扫了授权码之后,展示在用户手机端的授权帐号类型。 - 1 表示手机端仅展示公众号;2 表示仅展示小程序,3 表示公众号和小程序都展示。如果为未指定,则默认小程序和公众号都展示。 - 第三方平台开发者可以使用本字段来控制授权的帐号类型。 - 对于已经注销、冻结、封禁、以及未完成注册的帐号不再出现于授权帐号列表。
    biz_appid- 指定授权唯一的小程序或公众号 。 - 如果指定了appid,则只能是该 appid 的管理员进行授权,其他用户扫码会出现报错。 - auth_type、biz_appid 两个字段如果设置的信息冲突,则biz_appid生效的优先级更高。 - 例如,auth_type=1,但是biz_appid是小程序的appid,则会按照auth_type=2来处理,即以biz_appid的类型为准去拉出来对应的权限集列表.
    category_id_list- 指定的权限集 id 列表,如果不指定,则默认拉取当前第三方账号已经全网发布的权限集列表。 - 如需要指定单个权限集ID,写法为“category_id_list=99” ,如果有多个权限集,则权限集 id 与id之间用中竖线隔开。

    自建授权链接需要参数 component_appid pre_auth_code auth_type redirect_uri

    csharp
    string componentAppId="xxx";
    string componentAccessToken = await wechatTokenManager.GetComponentTokenAsync(componentAppId);
    var preAuthCode = await wechatTokenManager.GetPreAuthCodeAsync(componentAppId, componentAccessToken);
    var redirectUrl=HttpUtility.UrlEncode("https://xxxx")

    得到参数后,创建链接

    版本使用场景
    PC版https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx&auth_type=xxx
    H5版 - 新版https://open.weixin.qq.com/wxaopen/safe/bindcomponent?action=bindcomponent&no_scan=1&component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx&auth_type=xxx&biz_appid=xxxx#wechat_redirect

    回调地址会收到授权码参数auth_code和有效期expires_in,调用接口获取刷新令牌,需要参数component_access_token component_appid authorization_code,得到authorization_info,它包含了authorizer_access_token

    csharp
    [HttpGet("auth/callback")]
    public async Task ComponentAuthCallback(string auth_code, string expires_in)
    {
        string componentAccessToken = await wechatTokenManager.GetComponentTokenAsync(componentAppId);
        var res = await wechat.SendAsync<AuthorizerInfoResponse>(new AuthorizerInfoRequest(componentAccessToken, componentAppId, auth_code));
        if (res != null && res.Code == 0)
        {
            string key = $"authorizerInfo-{res.AuthorizationInfo.AuthorizerAppId}";
            store.Set(key, res.AuthorizationInfo);
        }
    }
  2. 在第三方平台上复用公众号资质注册小程序

    2.1 第三方平台网页显示链接

    json
    https://mp.weixin.qq.com/cgi-bin/fastregisterauth?appid={appId}&component_appid={componentAppId}&copy_wx_verify=1&redirect_uri={redirectUrl}

    每个参数的定义

    参数参数说明
    component_appid第三方平台的 appid
    appid公众号的 appid
    copy_wx_verify是否复用公众号的资质进行微信认证(1:申请复用资质进行微信 认证 0:不申请)
    redirect_uri用户扫码授权后,MP 扫码页面将跳转到该地址(注:1.链接需 urlencode 2.Host 需和第三方平台在微信开放平台上面填写的登 录授权的发起页域名一致)

    生成的链接必须在第三方平台网站上被点击,否则无效(注意:&copy_wx_verify,要写成&&copy_wx_verify)

    2.2 回调地址会得到新参数ticket,调用复用公众号资质快速注册小程序接口完成注册

    csharp
    [HttpGet("fastregisterauth/callback")]
    public async Task<object> FastRegisterAuthCallback(string appId,string ticket)
    {
        //获取authoirzerAccesstoken  
        string key = $"authorizerInfo-{appId}";
        var authInfo=store.Get<AuthorizationInfo>(key);
        var res=await wechat.SendAsync<RegisterByOffiaccountResponse>(new RegisterByOffiaccountRequest(authInfo.AuthorizerAccessToken, ticket));
        return res;
    }

代商家管理小程序API

代商家管理公众号API

批理代云开发

普通代云开发

微信云托管

获取令牌

请求

json
{
  "component_appid":  "appid_value" ,
  "component_appsecret":  "appsecret_value",
  "component_verify_ticket": "ticket_value"
}

返回

json
{
  "component_access_token": "61W3mEpU66027wgNZ_MhGHNQDHnFATkDa9-2llqrMBjUwxRSNPbVsMmyD-yq8wZETSoE5NQgecigDrSHkPtIYA",
  "expires_in": 7200
}

获取刷新令牌

请求

json
{
"component_appid":"appid_value" ,
"authorization_code": "auth_code_value"//授权码, 会在授权成功时返回给第三方平台,详见第三方平台授权流程说明。该参数也可以通过平台推送的"授权变更通知"获取。
}

返回

json
{
  "authorization_info": {
    "authorizer_appid": "wxf8b4f85f3a794e77",
    "authorizer_access_token": "QXjUqNqfYVH0yBE1iI_7vuN_9gQbpjfK7hYwJ3P7xOa88a89-Aga5x1NMYJyB8G2yKt1KCl0nPC3W9GJzw0Zzq_dBxc8pxIGUNi_bFes0qM",
    "expires_in": 7200,
    "authorizer_refresh_token": "dTo-YCXPL4llX-u1W1pPpnp8Hgm4wpJtlR6iV0doKdY",
    "func_info": [
      {
        "funcscope_category": {
          "id": 1
        }
      },
      {
        "funcscope_category": {
          "id": 2
        }
      },
      {
        "funcscope_category": {
          "id": 3
        }
      }
    ]
  }
}