您的位置:首页 > 移动开发 > 微信开发

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

2017-11-08 15:11 387 查看

关于微信公众号支付获取用户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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息