
# 对接微信公众号获取用户信息
通过应用与微信对接，实现用户登录微信公众号并获取到用户信息。
 #### 前提条件
已在微信公众平台注册了商户的公众账号，并获取如下所示关键信息。
- 开发者ID（AppID）：微信公众号开发识别码，配合开发者密码可调用公众号的接口能力。在微信公众平台申请公众账号后，微信会自动分配对应的AppID。 获取方法：使用注册的公众账号和密码登录微信公众平台<https://mp.weixin.qq.com/>，在微信公众平台"开发 \> 基本配置"中，查看"AppID"取值。商户的公众账号审核通过后，邮件中也会包含该字段值。
  
- 开发者密码（AppSecret）：是校验微信公众号开发者身份的密码，具有极高的安全性，用于获取接口调用凭证access_token时使用。 获取方法：使用注册的公众账号和密码登录微信公众平台<https://mp.weixin.qq.com/>，在微信公众平台"开发 \> 基本配置"中，单击"AppSecret"后的"重置"进行获取。
  
 
#### 创建微信公众号连接器
1. 参考[登录华为云Astro轻应用应用设计器](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_9004.html)中操作，进入应用设计器。
2. 在左侧导航栏中，选择"集成"。
3. 单击"连接器"中的" 连接器实例"，进入连接器实例页面。
4. 在左侧导航栏中，选择"登录 \> 微信登录"。
5. 在右侧页面单击"+"，设置微信对接的参数。 
   表1新建微信公众号连接器参数说明 
   | 参数     | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   |:---|:---|
   | 名称     | 新建连接器的名称。命名要求如下： - 长度不能超过64个字符，包括前缀命名空间的长度。 名称前的内容为命名空间，在华为云Astro轻应用中为了避免不同租户间数据的重名，租户在首次创建应用时需要先定义一个命名空间。一个租户只能创建一个命名空间，创建后不支持修改。   - 必须以英文字母开头，只能由英文字母、数字或单下划线组成，且不能以下划线结尾。   |
   | App ID | 微信公众号开发识别码，请与[前提条件]中的"AppID"取值保持一致。                                                                                                                                                                                                                                                                                                                                                                 |
   | 密钥     | 校验公众号开发者身份的密码，请与[前提条件]中的"AppSecret"取值保持一致。                                                                                                                                                                                                                                                                                                                                                          |
   | 作用域    | 用户登录微信公众号的授权作用域类型，有如下两种。 - snsapi_base ：不会弹出授权页面，不需要用户授权，只能获取用户的openid。  - snsapi_userinfo：会弹出授权页面，需要用户授权，可通过openid获取用户头像、昵称等信息。即使在用户未关注微信公众号的情况下，只要用户授权，也能获取其信息。                                                                                                                |
   | 重定向地址  | 用户授权后，重定向回调的地址。                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 打包当前配置 | 选中该选项后，应用打包时会将当前配置的连接器信息一并打出。例如，如果应用包发布到运行环境，当前配置默认会被同步到运行环境中。如果不勾选，则内容不会打包发布到运行环境，此时需要您参考[管理应用中的连接器](https://support.huaweicloud.com/usermanual-astrozero/astrozero_06_2020.html)中操作，创建对应的连接器。 默认为选中，对信息敏感的场景，建议不勾选。                                                                                                                                                                                                                |
      
   
   
6. 设置完成后，单击"保存"。
 
#### 在脚本中调用连接器
在脚本中，调用已创建的连接器，实现用户登录微信公众号。
1. 在微信客户端的H5页面，发起AJAX请求，用于获取code。
   
   请求示例如下：
   ```
   https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
   ```
   若提示"该链接无法访问"，请检查参数是否填写错误，是否拥有scope参数对应的授权作用域权限。
   
   
2. 参考[创建空白华为云Astro轻应用脚本](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_9162.html)中操作，创建一个空白脚本。
3. 在脚本编辑器中，输入如下代码。 
   ```
   import * as wechat from 'wechat';
   let connectorID = "wechat"
   let code = "xxxxx"
   let client = wechat.NewClient(connectorID)
   let res = client.GetAccessToken(code)
   console.log(res)
   ```
   其中，"connectorID"为连接器的名称，"code"为[1]获取的code取值。
   
   
4. 单击脚本编辑器页面上方的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001936099225.png)，保存脚本。
5. 保存成功后，单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001936099217.png)，执行脚本。
6. 不用输入请求报文，直接单击测试窗口右上角的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001894299552.png)。
7. 在日志页签，查看到已获取"access_token"和"openid"，可用于登录微信公众号。 
   ```
   { 
       "access_token":"ACCESS_TOKEN",
       "expires_in":7200,
       "refresh_token":"REFRESH_TOKEN",
       "openid":"OPENID",
       "scope":"SCOPE"
   }
   ```
   
   
 
