小程序深度对接

优质
小牛编辑
131浏览
2023-12-01

1. 上报用户信息

​ 小程序基础对接时,客服看到了用户名如同 oyr0h0c4PBRJ....-h9Eq3tfEgmkopenid做用户名或直接显示unknown。如需要支持以微信用户名称显示到客户端,需要开发实现如下功能。

1.1 小程序中上报用户信息

接口地址http://`{$hosts}`/thirdparty/smallprogram

请求方式POST

数据格式XML

请求参数

参数名类型必填说明
ToUserNameString小程序原始ID
JsCodeString用户登录凭证(有效期五分钟),在小程序中调用wx.login返回内容,
参见文档
EncryptedDataString包括敏感数据在内的完整用户信息的加密数据,数据来自 wx.getUserInfo返回内容,
参见文档
IVString加密算法的初始向量,数据来自 wx.getUserInfo返回内容,
参见文档
FromUserNameString发送方昵称(此时发送方是小程序昵称)
CreateTimeint消息创建时间 (整型),时间戳
MsgTypeString消息类型,固定字符串:userinfo
MsgIdString任意不重复数组
ContentString消息内容,传空即可

请求样例

<xml>
  <ToUserName><![CDATA[gb_**********]]></ToUserName>
  <JsCode><![CDATA[071rsFQ*********P60tmEQ60rsFQm]]></JsCode>
  <EncryptedData><![CDATA[KXn6qLS1v***************8lJcvz/aGpPd98qH3v0GOEmjLf/UKDbuFO5V2HnMTs08Y3ieCLtyVcMsXUWAZwE/MQccUvatmRHEcWfS985SBNLX9IqQBVKN+C38KR****TmMsGE4SZEcXHy7OFjWB2/h9rDxWu9EDLO/****fWmRfa8NrIMQAvBjFEXQbM84br7d0mPdZNkUkLIdFPPrpD3DpKJzzljTkPlkJfXfY0b+HO/xVzDEdzYGSKMZdT/f0IwTjADEUlmo7ZUHn2MYU******rc1gIXeP4pqklnLAyHBNm/+lXsjjjWtzJfWqFMVw4AIyGVlAhOvXpLqbWjcuGFcq8AVC7CV72iQY2Gq+njnVLsdqysUJaizk7LmWOYzt/0JAY7si8ct5F2pKavtQuA51VrnSDSXB1NQyA8PJh4HJQ==]]></EncryptedData>
  <FromUserName><![CDATA[访客id]]></FromUserName>
  <CreateTime>1530669642</CreateTime>
  <Content><![CDATA[]]></Content>
  <MsgId>6574176053822961800</MsgId>
  <MsgType><![CDATA[userinfo]]></MsgType>
  <IV><![CDATA[RoMQ30UM****+Ja918G6aQ==]]></IV>
</xml>

1.2 微信小程序显示用户信息实现方式

App({
  onLaunch: function () {

    this.getUserInfo();
  },
  getUserInfo: function () {
    var originalID = 'gh_******042d25e';
    var jsCode = '';
    //调用登录接口
    wx.login({
      success: function (res) {
        if (res.code) {
          jsCode = res.code;
          // 登录成功
          console.info('登录成功, 返回信息 jsCode:', jsCode)

          // 获取用户信息
          wx.getUserInfo({
            success: function (res) {

              console.log('用户信息 encryptedData:', res.encryptedData);
              console.log('用户信息 IV', res.iv);

              var arrData = ['<xml>'];
              arrData.push('<ToUserName><![CDATA[',originalID,']]></ToUserName>');
              arrData.push('<JsCode><![CDATA[', jsCode,']]></JsCode>');
              arrData.push('<EncryptedData><![CDATA[', res.encryptedData,']]></EncryptedData>');
              arrData.push('<IV><![CDATA[', res.iv,']]></IV>');
              arrData.push('</xml>');

              // 上报用户信息
              wx.request({
                url: 'http://${host}/thirdparty/smallprogram',
                method: 'POST',
                data: arrData.join(''),
                header: {
                  'content-type': 'application/xml'
                },
                success: function (response) {

                  if( response.statusCode == 200 ){

                    console.info('提交用户数据成功!', response);
                  }
                  else{
                    console.error('提交用户数据失败!', response);
                  }
                }
              });
            }
          });

        } else {
          // 登录失败
          console.info('login fail');
        }

      } // end login success
    }); // end getUserInfo

  }
});