IT门户, 中国互联网人工智能物联网行业资讯平台--公众IT
新闻来源:互联网资料整理       发布时间:2023/4/5 12:41:22       共计:4608 浏览

前言:

随着百度小程序的风头正劲,越来越多的站长投入到百度小程序的开发中来,但是开发过程中难免会碰到诸多问题无法自己解决,07-15小编发现百度用户:【彩云之南q8】提出了一个关于“联合登录数据可能无法解密或解密后手机号是空的?”的问题,在问题中开发者彩云之南q8对该问题做了如下阐述:

问题类型:

  • 问题类型:bug

问题描述:

上线联合登陆快两个月了,偶尔能碰到解密出错,更可怕的是解密不出错但没有手机号。

大部分用户解密是没问题的,我自己试了很多次都正常。

个别用户有第一次点联合登陆是无法解密,第二次再点就能正常解密到手机号。

不清楚有没有同样问题的。。。

贴上前端和服务端代码。openid都是正常拿到了。

swan.getLoginCode({
    success: ({code}) => {
        this.methods.handleBdLogin({
            encryptedData,
            iv,
            code,
        }).then(() => {
             // 登录成功
        })
   })
})
def hhhhh():
    bd = BaiduClient()
    res = bd.code2Session(code)
    openid = res['openid']
    session_key = res['session_key']
    logger.info('==decrypt: {} {} {}'.format(encrypted_data, iv, session_key))
    data = bd.decrypt(encrypted_data, iv, session_key)
    if not data:
        return responseError("无法解密")
    phone = data.get('mobile', '')
    if not phone:
        return responseError("无法解密手机号")
    

class BaiduClient(object):

    def __init__(self):
        self.app_key = settings.BD_MP_APPKEY
        self.app_secret = settings.BD_MP_SECRET

    def code2Session(self, code):
        api_url = 'https://spapi.baidu.com/oauth/jscode2sessionkey'
        params = {
            'code': code,
            'client_id': self.app_key,
            'sk': self.app_secret
        }
        req = requests.post(api_url, params)
        if req.status_code == 200 and req.content:
            return req.json()
        else:
            return req

    def decrypt(self, encrypted_data, iv, session_key):
        session_key = base64.b64decode(session_key)
        iv = base64.b64decode(iv)
        encrypted_data = base64.b64decode(encrypted_data)
        cipher = AES.new(session_key, AES.MODE_CBC, iv)
        logger.info('==encrypted: {}=='.format(encrypted_data))
        decrypted = cipher.decrypt(encrypted_data)
        data = self.decode(decrypted)
        if not data:
            return ''
        return json.loads(data.decode() if isinstance(data, bytes) else data)

    def decode(self, s):
        s = s[:-ord(s[len(s) - 1:])]
        if len(s) < 16:
            return ''  # 非法,无法解密
        s = s[16:]
        xmllen = struct.unpack('!L', s[:4])
        xmllen = xmllen[0]
        xml_content = s[4:xmllen + 4]
        return xml_content

注:以上是百度小程序开发者:”彩云之南q8″对于本问题的一些阐述,这里做一个引用,我们将实时关注百度小程序助手对该问题提出的解决方案。

解决方案:

【07-15】百度官方对用户彩云之南q8提出的联合登录数据可能无法解密或解密后手机号是空的?给予如下回复

开发者您好,这个问题是稳定复现的吗?双端都可以复现?麻烦提供下小程序二维码

结语:

百度智能微信小程序将提供超过60个AI接口和超过20个NA化组件给开发人员,包括语音、文字、图像和人脸识别等。进入智能化时期,百度不是空喊口号,已经在大步实施。

如果您也在使用百度小程序,请关注我们,如果您有关于百度小程序的使用问题请联系我们,或者去百度小程序平台找官方人员给予解决,相信百度在小程序上的发力会是一个里程碑!

版权说明:
本网站凡注明“公众IT 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
您可以扫描右侧微信二维码联系我们。
网站首页 关于我们 联系我们 合作联系 会员说明 新闻投稿 隐私协议 网站地图