微信wap站开发中微信支付

一、获取apikey,appsecret与商户号

  注册公众号、商户号

二、获取用户的OpenId

  1.设置【授权回调页面域名】

    官方解释:用户在网页授权页同意授权给公众号后,微信会将授权数据传给一个回调页面,回调页面需在此域名下,以确保安全可靠。回调页面域名不支持IP地址。

    

     

  2.用户同意授权

    我是把这个url写在微信菜单下的,当进入这个页面的时候就让用户同意。注意:好像是静默授权的,用户不知道

    1.url:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=appid&redirect_uri=url&response_type=code&scope=snsapi_userinfo&state=park#wechat_redirect

    参数:appid:公众号的唯一标识

       redirect_uri:重定向的url,就是授权后要跳转的页面

       scope:应用授权作用域

          snsapi_base:不弹出授权页面,直接跳转,只能获取用户openid

          snsapi_userinfo:弹出授权页面,可通过openid拿到昵称、性别、所在地

         state:重定向后带的参数

    2.用户同意后会产生一个code,只有5分钟时间的有效期。

1 String code = request.getParameter("code")

    3.code换openId

/**
 * 常量类
 * @author rory.wu
 *
 */
public class Constants {
    // 第三方用户唯一凭证
    public static String appid = "";
    // 第三方用户唯一凭证密钥
    public static String appsecret = "";
    //商户ID
    public static String mch_id="";
    //获取openId
    public static String oauth2_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
    
}
/**
 * 通用工具类
 * @author rory.wu
 * @version 1.0
 * @since 2015年08月05日
 */
public class CommonUtil {
    
    private static Logger log = Logger.getLogger(CommonUtil.class);
    public static JSONObject httpsRequestToJsonObject(String requestUrl, String requestMethod, String outputStr) {
        JSONObject jsonObject = null;
        try {
             StringBuffer buffer = httpsRequest(requestUrl, requestMethod, outputStr);
            jsonObject = JSONObject.fromObject(buffer.toString());
        } catch (ConnectException ce) {
            log.error("连接超时:"+ce.getMessage());
        } catch (Exception e) {
            log.error("https请求异常:"+e.getMessage());
        }
        return jsonObject;
    }
    
    
    private static StringBuffer httpsRequest(String requestUrl, String requestMethod, String output)
            throws NoSuchAlgorithmException, NoSuchProviderException, KeyManagementException, MalformedURLException,
            IOException, ProtocolException, UnsupportedEncodingException {
        
        URL url = new URL(requestUrl);
        HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
        
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setUseCaches(false);
        connection.setRequestMethod(requestMethod);
        if (null != output) {
            OutputStream outputStream = connection.getOutputStream();
            outputStream.write(output.getBytes("UTF-8"));
            outputStream.close();
        }


        // 从输入流读取返回内容
        InputStream inputStream = connection.getInputStream();
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        String str = null;
        StringBuffer buffer = new StringBuffer();
        while ((str = bufferedReader.readLine()) != null) {
            buffer.append(str);
        }


        bufferedReader.close();
        inputStreamReader.close();
        inputStream.close();
        inputStream = null;
        connection.disconnect();
        return buffer;
    } 
}
/**
     * 获取用户的openId,并放入session
     * @param code 微信返回的code
     */
    private void setOpenId(String code) {
        session.put("code", code);
        String oauth2_url = Constants.oauth2_url.replace("APPID", Constants.appid).replace("SECRET", Constants.appsecret).replace("CODE", String.valueOf(session.get("code")));
        log.info("oauth2_url:"+oauth2_url);
        JSONObject jsonObject = CommonUtil.httpsRequestToJsonObject(oauth2_url, "POST", null);
        log.info("jsonObject:"+jsonObject);
        Object errorCode = jsonObject.get("errcode");
        if(errorCode != null) {
            log.info("code不合法");
        }else{
            String openId = jsonObject.getString("openid");
            log.info("openId:"+openId);
            session.put("openId", openId);
        }
    }
oauth2_url返回的格式是:
  { 
   "access_token":"ACCESS_TOKEN", 
   "expires_in":7200, 
     "refresh_token":"REFRESH_TOKEN", 
     "openid":"OPENID", "scope":"SCOPE", 
     "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" 
   }
Code无效时:
  {
    "errcode":40029
   ,"errmsg":"invalid code"
    }
-我是签名----------------------------
这里只是一个签名

转载自 http://www.cnblogs.com/imeng/p/4788701.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值