第三方平台在没有使用微信云托管的情况下,需要自行加解密获取凭证,RsCode.WeChat
提供了第三方平台常用的API
常用API
获取ComponentAccessToken
自定义处理消息事件类,重写WeChatEventHandler.OnComponentVerifyTicketEvent()
,并添加至service容器中
ticket缓存 key=component_verify_ticket-{componentAppId}
调用IWechatTokenManager.GetComponentTokenAsync(string componentAppId)
,得到componentAccessToken
例子:
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";
}
}
services.AddScoped<IWeChatEventHandler, CustomWxMsgHandler>();
var componentAccessToken=WechatTokenManager.GetComponentTokenAsync(componentAppId);
获取预授权码
csharpIWechatTokenManager.GetPreAuthCodeAsync(string componentAppId, string componentAccessToken);
得到
PreAuthCode
该接口用于获取预授权码(pre_auth_code)是第三方平台方实现授权托管的必备信息,每个预授权码有效期为 1800秒。
获取授权帐号调用令牌
csharpwechat.SendAsync<AuthorizerAccessTokenResponse>(new AuthorizerAccessTokenRequest(componentAccessToken,componentAppId, authorizerAppId, authorizerRefreshToken))
该接口用于获取授权帐号的authorizer_access_token。authorizer_access_token 有效期为 2 小时,authorizer_access_token 失效时,可以使用 authorizer_refresh_token 获取新的 authorizer_access_token。
获取刷新令牌
csharpwechat.SendAsync<AuthorizerRefreshTokenResponse>(new AuthorizerRefreshTokenRequest(componentAccessToken,componentAppId, authorizationCode))
- 当用户在第三方平台授权页中完成授权流程后,第三方平台开发者可以在回调 URI 中通过 URL 参数获取授权码(authorization_code)。然后使用该接口可以换取公众号/小程序的刷新令牌(authorizer_refresh_token)。
代商家注册小程序API
//快速注册企业小程序
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());
注册审核事件推送
Task<string>OnNotifyThirdFasteregisterEvent(ThirdFasteRegisterNotifyData data);
可查阅官方代商家注册小程序API
复用公众号资质注册小程序,需要 代公众号发起网页授权
scope参数 已微信认证的服务号拥有 snsapi_base
和 snsapi_userinfo
权限,两者区别
- 以snsapi_base为 scope 发起的网页授权,是用来获取进入页面的用户的 openid 的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
- 以snsapi_userinfo为 scope 发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
- 用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户 OpenID 来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的
代商家注册小程序实例:
复用公众号资质快速注册小程序
实战开发步骤:
公众号管理员授权第三方平台
通过自建授权链接,公众号管理员授权后,可以得到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
csharpstring componentAppId="xxx"; string componentAccessToken = await wechatTokenManager.GetComponentTokenAsync(componentAppId); var preAuthCode = await wechatTokenManager.GetPreAuthCodeAsync(componentAppId, componentAccessToken); var redirectUrl=HttpUtility.UrlEncode("https://xxxx")
得到参数后,创建链接
回调地址会收到授权码参数
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.1 第三方平台网页显示链接
jsonhttps://mp.weixin.qq.com/cgi-bin/fastregisterauth?appid={appId}&component_appid={componentAppId}©_wx_verify=1&redirect_uri={redirectUrl}
每个参数的定义
参数 参数说明 component_appid 第三方平台的 appid appid 公众号的 appid copy_wx_verify 是否复用公众号的资质进行微信认证(1:申请复用资质进行微信 认证 0:不申请) redirect_uri 用户扫码授权后,MP 扫码页面将跳转到该地址(注:1.链接需 urlencode 2.Host 需和第三方平台在微信开放平台上面填写的登 录授权的发起页域名一致) 生成的链接必须在第三方平台网站上被点击,否则无效(注意:©_wx_verify,要写成&©_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
批理代云开发
普通代云开发
微信云托管
请求
{
"component_appid": "appid_value" ,
"component_appsecret": "appsecret_value",
"component_verify_ticket": "ticket_value"
}
返回
{
"component_access_token": "61W3mEpU66027wgNZ_MhGHNQDHnFATkDa9-2llqrMBjUwxRSNPbVsMmyD-yq8wZETSoE5NQgecigDrSHkPtIYA",
"expires_in": 7200
}
请求
{
"component_appid":"appid_value" ,
"authorization_code": "auth_code_value"//授权码, 会在授权成功时返回给第三方平台,详见第三方平台授权流程说明。该参数也可以通过平台推送的"授权变更通知"获取。
}
返回
{
"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
}
}
]
}
}