小程序在启动时如何接收传递的参数---------小程序坑之no1

因为被同一公众号关联的小程序之间可以进行跳转,这样从一个小程序跳转到另一个小程序时就需要接收传递过来的参数。具体如何跳转请参阅官方文档: https://developers.weixin.qq.com/miniprogram/dev/api/navigateToMiniProgram.html
下面直接贴代码:
onLaunch: function (options)
    {
         /*启动时获取参数,其中user_id和store_id是从前一个小程序传递过来的参数。注:这个参数不是extraData.如果是extraData,需要用
options.referrerInfo.extraData获取。*/
         var id =options.query.user_id;
         var sid =options.query.store_id;
    },

为何说它是坑呢,请看页面之间接收参数代码:

onLoad(options)
  {
   var name= options.userName;
   var pass= options.pass;
  },

区别显而易见。具体请参加官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/app.html

### 实现微信服务号获取用户手机号 #### 配置微信公众平台 为了能够成功获取用户的手机号,在微信公众平台上需要完成一系列配置工作。这包括但不限于设置合法域名、服务器地址(URL)、Token以及EncodingAESKey等信息,确保这些配置项均处于有效状态并已通过校验[^1]。 #### 获取Access Token 在准备就绪后,需先取得`access_token`,这是调用微信接口的重要凭证之一。可以通过向指定的API发送请求来换取此令牌: ```java public String getAccessToken(String appId, String appSecret){ String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appId+"&secret="+appSecret; ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class); JSONObject jsonObject = new JSONObject(responseEntity.getBody()); return (String)jsonObject.get("access_token"); } ``` 上述代码片段展示了如何构建HTTP GET请求以接收来自微信服务器返回的数据包,并从中提取出所需的`access_token`值[^4]。 #### 用户授权与Code交换 当应用希望访问特定资源时,则可能涉及到OAuth2.0协议下的授权码模式。对于本案例而言,即让用户同意分享其个人信息给第三方开发者账号使用。此时会引导用户跳转至一个由微信提供的页面进行确认操作,一旦同意则会产生一段临时性的字符串——code作为后续处理的关键参数传递回来。 ```html <!-- 小程序--> <button class="loginPopup-btnList-login" open-type="getPhoneNumber" @getphonenumber="wxPhonelogin">微信手机号登录</button> ``` 这段HTML标签代表了一个按钮控件,它允许用户触发获取电话号码的过程。当点击该按钮时将会执行绑定在其上的JavaScript函数`wxPhonelogin()`,进而发起对后端的服务请求携带必要的身份验证材料[^2]。 #### 解析加密数据 最后一步就是解密从前端来的加密数据流,从而读取出真实的手机号码字段。这里需要用到官方文档里提到的一种特殊的算法逻辑来进行转换计算。 ```java // 假设已经获得了encryptedData, iv 和 session_key 这三个要素 byte[] resultByte = decrypt(encryptedData, sessionKey, iv); if(null != resultByte && resultByte.length > 0){ String userInfo = new String(resultByte,"UTF-8"); // 转换成明文形式 System.out.println(userInfo); // 输出调试信息 } private byte[] decrypt(byte[] encryptedData, String keyStr, String ivStr)throws Exception{ SecretKeySpec keySpec = new SecretKeySpec(keyStr.getBytes(), "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding"); IvParameterSpec ivspec = new IvParameterSpec(ivStr.getBytes()); cipher.init(Cipher.DECRYPT_MODE, keySpec,ivspec); return cipher.doFinal(Base64.decodeBase64(encryptedData)); } ``` 以上代码实现了对接收到的信息体实施反序列化动作,最终可以得到未经任何保护措施遮掩的真实用户资料副本[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值