关于微信公众号支付获取用户openId的方法

关于微信公众号支付获取用户openId的方法


说明

内容是在参考了其他博主的内容后加上自己遇到的问题进行了整理,如果有什么地方有错误还望广大博友及时指。

代码块

代码块语法遵循标准markdown代码,例如:

/**
* 公众号支付时获取用户openId
* 1.首先要想获取到微信公众号的openId,必须在微信公众平台设置一个回调授权目录(这个授权目录必须微信公众号通过微信认证才能设置)
* 2.想要获取openId得先访问微信指定的地址
* 3.然后微信会重定向到你在请求时填的redirect_uri参数的地址(前提是这个地址必须在回调授权目录域名下)
* 4.然后可以通过request.getParameter("code")获取到唯一的code
* 5.然后再通过code去指定地址获取到openId
*/

//前端代码
    var redrectUrl = "****/cust/getOpenId";
    var appid = "";//微信公众号appid
    var wxUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + redrectUrl +
                        "&response_type=code&scope=snsapi_userinfo&state="+ $("#cashin_id").val() + "#wechat_redirect";
/* 
   scope:应用授权作用域
     snsapi_base:不弹出授权页面,直接跳转,只能获取用户openid
     snsapi_userinfo:弹出授权页面,可通过openid拿到昵称、性别、所在地
      state:这里是微信重定向后要传递的参数(这个参数只支持英文字母和数字)。比如你可以把自己的订单号传过去,然后通过request.getParameter("state")获取 
 */
    //请求指定的微信地址
    location.href = wxUrl;

//后端代码
@RequestMapping(value = "/cust/getOpenId",method = RequestMethod.POST)
public void getOpenId(){
   String code = request.getParameter("code");
    logger.info("^^^^^^^^^^CODE^^^^^^^^" + code);
    String openId = "";
    //根据code获取openId
    if (code != null && EqualsUtils.isNotEquals("", code)) {
        String state = request.getParameter("state");
        orderId = Long.parseLong(state);
        logger.info("^^^^^^^^^^state^^^^^^^^" + state);
        openId = getOpenId(code);
        logger.info("=========openId========" + openId);
    }else {
        orderId = Long.parseLong(request.getParameter("orderId"));
    }
}


/**
 * 根据微信返回的code获取公众号的用户信息
 * @param code 微信重定向后发返回的code
 * @return 用户的openId
 */
private String getOpenId(String code) {
    String appid = "";//微信公众号appid
    String secret = "";//微信公众号密钥
    String oauth2_url = "https://api.weixin.qq.com/sns/oauth2/access_token?
 appid=" + appid + "&secret=" + secret + "&code=" + code + "&grant_type=authorization_code";
    JSONObject result = HttpRequestUtils.postData(oauth2_url, null);
    if (result == null) {
        logger.info("^^^^^^^^^获取用户openId失败^^^^^^^^^^");
        return null;
    }
    Object errorCode = result.get("errcode");
    if (errorCode != null) {
        logger.info("=========code不合法==============");
        return null;
    }else {
        String openId = result.getString("openid");
        logger.info("openId:"+openId);
        return openId;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值