微信小程序总结

时间:2019-01-11
本文章向大家介绍微信小程序总结,主要包括微信小程序总结使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.获取微信小程序的appID和秘钥

登录 https://mp.weixin.qq.com ,注册微信小程序,注意不可直接使用服务号或订阅号的 AppID 。

2.微信小程序登录

通过 wx.login() 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程,

请求地址 : get请求 

https ://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRT&js_code=JSCODE&grant_type=authorization_code 

请求参数:  

appid  小程序 appId  , secret 小程序 appSecret , js_code 登录时获取的 code, grant_type 授权类型,此处只需填写 authorization_code

返回参数:

openid string 用户唯一标识
session_key string 会话密钥
unionid string 用户在开放平台的唯一标识符,在满足 UnionID 下发条件的情况下会返回
errcode number 错误码
errmsg string 错误信息

3.用户信息 

wx.getUserInfo()方法

    参数

encryptedData string 包括敏感数据在内的完整用户信息的加密数据
iv string 加密算法的初始向量

 

encryptedData 解密后为以下 json 结构

{
  "openId": "OPENID",
  "nickName": "NICKNAME",
  "gender": GENDER,
  "city": "CITY",
  "province": "PROVINCE",
  "country": "COUNTRY",
  "avatarUrl": "AVATARURL",
  "unionId": "UNIONID",
  "watermark": {
    "appid": "APPID",
    "timestamp": TIMESTAMP
  }
}

解密方法(部分代码)

String result = AesCbcUtil.decrypt(encryptedData, sessionKey, iv, "UTF-8");

public class AesCbcUtil {
 
 
    static {
        //BouncyCastle是一个开源的加解密解决方案,主页在http://www.bouncycastle.org/
        Security.addProvider(new BouncyCastleProvider());
    }
 
    /**
     * AES解密
     *
     * @param data           //密文,被加密的数据
     * @param key            //秘钥
     * @param iv             //偏移量
     * @param encodingFormat //解密后的结果需要进行的编码
     * @return
     * @throws Exception
     */
    public static String decrypt(String data, String key, String iv, String encodingFormat) throws Exception {
 
        //被加密的数据
        byte[] dataByte = Base64.decodeBase64(data);
        //加密秘钥
        byte[] keyByte = Base64.decodeBase64(key);
        //偏移量
        byte[] ivByte = Base64.decodeBase64(iv);
 
        try {
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
 
            SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
 
            AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
            parameters.init(new IvParameterSpec(ivByte));
 
            cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
 
            byte[] resultByte = cipher.doFinal(dataByte);
            if (null != resultByte && resultByte.length > 0) {
                String result = new String(resultByte, encodingFormat);
                return result;
            }
            return null;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidParameterSpecException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (InvalidAlgorithmParameterException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
 
        return null;
    }
}

数据解析(部分代码)

JSONObject userInfoJSON =new  JSONObject(result);
String openId = userInfoJSON.getString("openId");
String nickName = userInfoJSON.getString("nickName");
Integer gender = userInfoJSON.getInt("gender");

from :https://developers.weixin.qq.com/miniprogram/dev/api/code2Session.html