微信小程序Java后台获取手机号

小程序端:

  wx.request({
	url: registerphone, //自己的地址
	data: {
	  openid: openid,
	  encryptedData: encryptedData, //手机加密数据
	  iv: iv, // 加密iv
	  session_key: session_key,// 加密key
	},
	method: "post",
	header: {
	  "content-type": "application/x-www-form-urlencoded",
	},
	success: (resp) => {
	  console.log(resp);// 返回手机号
	},
  });

springboot后台:

pom.xml maven 依赖包:

        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.70</version>
        </dependency>

http 后台代码:


    @PostMapping("/registerphone")
    public String registerphone(String openid, String encryptedData, String iv, String session_key)
    {
        String retS = "";
        String appid = "wxc32bd5819d7a1cc5";
        try{
            JSONObject decryptObject = NativeUtils.decrypt(appid, encryptedData, session_key, iv);

            //logger.info(decryptObject.toJSONString());
            retS = decryptObject.getString("phoneNumber");

        } catch (Exception ex){

        }

        return retS;
    }


//---------------------------------------------------------------------------------
// 解密接口

    /**
	 * 解密数据
	 * @return
	 * @throws Exception
	 */
	public static JSONObject decrypt(String appId, String encryptedData, String sessionKey, String iv){
		try {
			byte[] resultByte = decrypt(Base64.decodeBase64(encryptedData),Base64.decodeBase64(sessionKey),Base64.decodeBase64(iv));
			if(null != resultByte && resultByte.length > 0){
				String result = new String(WxPKCS7Encoder.decode(resultByte));
				JSONObject jsonObject = JSONObject.parseObject(result);
				String decryptAppId = jsonObject.getJSONObject("watermark").getString("appid");
				if(!appId.equals(decryptAppId)){
					return null;
				}
				return jsonObject;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	static {
		Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
	}
	/**
	 * AES解密
	 *
	 * @param content
	 *            密文
	 * @return
	 * @throws InvalidAlgorithmParameterException
	 * @throws NoSuchProviderException
	 */
	public static byte[] decrypt(byte[] content, byte[] keyByte, byte[] ivByte) throws InvalidAlgorithmParameterException {
		try {
			Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
			Key sKeySpec = new SecretKeySpec(keyByte, "AES");
			cipher.init(Cipher.DECRYPT_MODE, sKeySpec, generateIV(ivByte));// 初始化
			byte[] result = cipher.doFinal(content);
			return result;
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (NoSuchPaddingException e) {
			e.printStackTrace();
		} catch (InvalidKeyException e) {
			e.printStackTrace();
		} catch (IllegalBlockSizeException e) {
			e.printStackTrace();
		} catch (BadPaddingException e) {
			e.printStackTrace();
		} catch (NoSuchProviderException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	// 生成iv
	public static AlgorithmParameters generateIV(byte[] iv) throws Exception {
		AlgorithmParameters params = AlgorithmParameters.getInstance("AES");
		params.init(new IvParameterSpec(iv));
		return params;
	}

在网上找了好久,东拼洗凑居然能用,希望对写小程序的朋友有帮助。

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
微信小程序汉堡点餐系统是一款基于微信小程序开发的在线点餐应用。该系统旨在为用户提供便捷、快速的点餐体验,同时帮助餐厅提高运营效率和客户满意度。本资源介绍将重点介绍该系统的技术架构、功能模块以及开发过程中可能遇到的问题。技术架构:微信小程序汉堡点餐系统采用了前后端分离的开发模式,前端使用微信小程序框架进行开发,后端则采用Java语言和Spring Boot框架搭建RESTful API。前端主要负责展示菜单、处理用户交互和调用后端API获取数据;后端负责处理业务逻辑、存储数据和与前端进行数据交互。此外,为了保证数据的安全性和稳定性,系统还采用了数据库(如MySQL)进行数据存储。功能模块:该系统主要包括以下几个功能模块:a. 用户登录/注册:用户可以通过手机号微信账号进行登录/注册,以便在系统中查看和管理自己的订单信息。b. 菜单浏览:用户可以浏览餐厅的菜单,包括菜品名称、价格、图片等信息。c. 下单支付:用户可以选择心仪的菜品,添加到购物车中,然后进行支付操作。支持多种支付方式,如微信支付、支付宝等。d. 订单管理:用户可以在“我的订单”页面查看自己的历史订单,包括订单状态、支付金额等信息。同时,用户还可以对已下单的订单进行取消、修改等操作。e. 商家后台管理:餐厅管理员可以通过后台管理系统查看和管理店铺的菜品、订单、会员等信息。同时,还可以进行营销活动、统计分析等工作。开发过程中可能遇到的问题:在开发过程中,开发者可能会遇到以下问题:a. 前后端数据交互问题:由于前后端采用的是不同的技术栈,因此需要解决数据格式转换、接口设计等问题。可以使用JSON格式进行数据传输,并定义统一的数据接口规范。b. 性能优化问题:随着用户量的增加,系统的性能可能会受到影响。可以通过缓存策略、负载均衡等方式进行优化。c. 安全问题:保护用户的隐私和支付安全是非常重要的。需要采取一系列措施,如加密传输、防止SQL注入等,来确保系统的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫爪子挠

老板大气!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值