2017-09-20 10:10:20 towtotow 阅读数 596
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27832 人正在学习 去看看 秦子恒

在进行微信公众号开发时,

不可避免的会遇到程序出错,

但是微信开发跟本地开发不同,


7error_message.jpg


本地开发时,

你可以通过调整错误级别来显示错误提示,

方便你调试程序,

但是微信开发时是没有错误信息提示的。


这里应该怎么获取公众平台开发过程中的错误信息呢…

微信开发获取出错信息,进行错误调试视频教程在线观看

http://edu.csdn.net/course/detail/2586/40528

2016-12-12 11:45:37 u012178818 阅读数 953
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27832 人正在学习 去看看 秦子恒

  是不是大家经常能在微信公众号上访问某家应用的时候弹出这样一个页面,当你点击确定之后,你进入这家应用的时候会惊奇的发现,你已经登录好了,并且你的微信信息都被他采集到了。

  这是怎么做的呢,首先我们得了解几个微信开发接口。

  1,授权接口

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

  2,获取access_token

  

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code


  3,获取用户信息

  注意:调用此接口的前提,授权接口的scope必须为snsapi_userinfo,如果你不需要获取用户的相关信息,只需要获取用的openid,那本接口就不用调用到。

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

   

  上述三个接口为微信平台提供的api,具体可以参考官方文档。

  

   下面是我写的一个简单的例子:


   OauthGetCode.java

@RequestMapping(value = "/doOAuthLogin")
	public String doOAuth(HttpServletRequest request, HttpServletResponse response

	) throws IOException {

		String appid = ConfigUtils.APPID;
		String redirectUrl = ConfigUrlUtils.YUMING + "exhibitFront/OAuthLogin";
		String state = "0";
		request.setAttribute("appid", appid);
		request.setAttribute("redirect_url", redirectUrl);
		request.setAttribute("outTradeNum", state);

		return "utils/OAuthGetCode";

	}

   OauthGetCode.jsp

<%@ page language="java" pageEncoding="utf-8"%>
<html>
	<head>
		<meta name="viewport" content="width=device-width,user-scalable=0">
	</head>
	<body>
		<script language="javascript" type="text/javascript">
	window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid }&redirect_uri=${redirect_url }&response_type=code&scope=snsapi_userinfo&state=${outTradeNum }#wechat_redirect";
</script>



	</body>
</html>
 

  OAuthLogin.java

@RequestMapping(value = "/OAuthLogin")
	public String oauthLogin(HttpSession session, HttpServletRequest request, @RequestParam(value = "code") String code,
			Model model) {

		// 获取用户的openid
		String returnJSON = HttpTool.getToken(ConfigUtils.APPID, ConfigUtils.APPSECRET, "authorization_code", code);
		JSONObject obj = JSONObject.fromObject(returnJSON);
		System.out.println(obj);//获取到的用户信息
		String openid = obj.get("openid").toString(); //例:获取用户信息,详细可以参考下面进行获取
		/*
		 * 可获取的用户信息:
		openid	用户的唯一标识
		nickname	用户昵称
		sex	用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
		province	用户个人资料填写的省份
		city	普通用户个人资料填写的城市
		country	国家,如中国为CN
		headimgurl	用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
		privilege	用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)
		unionid	只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。详见:获取用户个人信息(UnionID机制)
		
		*/
		

		return "redirect:/exhibitFront/index";

	}


   特别注意:测试授权获取用户信息必须要有公众号且开通了相应接口功能,

 此处需要修改成自己访问的域名地址,否则会授权不通过的哦。

   


2018-09-09 16:17:57 qq_41971087 阅读数 4843
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27832 人正在学习 去看看 秦子恒

在微信开发中,就有一些接口会涉及到获取接口凭证的接口,开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183

比如我们在微信公众号创建菜单中就会有获取接口凭证要去,还有就是微信小程序在做消息推送功能时也会有调用access_token获取微信接口凭证的要求

获取access_token:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

参数:

grant_type:默认添client_credential

appid:第三方用户唯一凭证 (微信后台中获取)(微信用户唯一的)

secret:第三方用户唯一凭证密钥,即appsecret(微信后台中获取)(微信用户唯一的)

返回过来的参数:

access_token:获取到的凭证(这个凭证是需要保存起来,获取的次数是有限制的)

expires_in:凭证的时间

这个接口凭证,我自己是获取当前的时间搓加上凭证时间保存在数据库中,当使用时凭证时,都会去数据库中查询,用时间去进行比较看是否过期,过期就重新调用接口凭证,除了这种还可以放到Redis缓存中进行保存

代码实例:

Httprequests.java(发送请求的工具类)


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
import java.util.Random;
import javax.servlet.http.HttpServletRequest;
/**
 * <p>User: qrn
 * <p>Date: 14-1-28
 * <p>Version: 1.0
 * 描述: http发起请求:
 */
public class Httprequests {


    public static void main(String[] aegs) {
        String string = Httprequests.sendGet("http://v.qq.com/x/cover/kvehb7okfxqstmc.html?vid=e01957zem6o","");
        System.out.print(string);
    }

    public static String  sendGet (String url,String param) {
        String result ="";
        BufferedReader in  =null;
        try {
            String urlNameString = url +"?" +param;
            System.out.println("发送的链接请求:"+urlNameString);
            URL reaurl = new URL(urlNameString);

            URLConnection connection  = reaurl.openConnection();

            //设置通用
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "keep-Alive");
            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

            //建立实际的连接
            connection.connect();

            Map<String, List<String>> map = connection.getHeaderFields();
            //定义 BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(
                    connection.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送GET请求出现异常!" + e);
            e.printStackTrace();
        }
        // 使用finally块来关闭输入流
        finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return result;
    }


    /**
     * 向指定 URL 发送POST方法的请求
     * @param url 发送请求的 URL
     * @param param 参数
     * @return String 所代表远程资源的响应结果
     */
    public static String sendPost(String url, String param) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            // 打开和URL之间的连接
            URLConnection conn = realUrl.openConnection();
            // 设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            
            // 发送请求参数
            out.print(param);
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送 POST 请求出现异常!"+e);
            e.printStackTrace();
        }
        //使用finally块来关闭输出流、输入流
        finally{
            try{
                if(out!=null){
                    out.close();
                }
                if(in!=null){
                    in.close();
                }
            }
            catch(IOException ex){
                ex.printStackTrace();
            }
        }
        return result;
    }


    /**
     * 拿到ip
     * @param req request作用域:
     * @return String
     */
    public static String getRemoteIP(HttpServletRequest req) {
        String ip = req.getHeader("X-Real-IP");

        if (ip == null || ("").equals(ip)) {
            ip = req.getRemoteAddr() == null ? "127.0.0.1" : req.getRemoteAddr();
        }
        return ip;
    }

    /**
     *  生成
     * @param num 参数
     * @return String
     */
    public static String getPamens(Integer num){
        String base = "abcdefghijklmnopqrstuvwxyz0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < num; i++) {
            int number = random.nextInt(base.length());
            sb.append(base.charAt(number));
        }
        return sb.toString();
    }
}

 

TokenServiceImpl.java(获取接口):

    /**
     * 接口凭证:
     */
    @Override
    public Map<String, Object> access_token() {
         String param="grant_type="+WeChatTool.access_token_grant_type+"&appid="+WeChatTool.wxspAppid+"&secret="+WeChatTool.wxspSecret;
          //获取接口凭证
                 String sendGet=Httprequests.sendGet(WeChatTool.select_access_token,param);
                 System.out.println("发送git请求的返回值:"+sendGet);
                 JSONObject json = JSONObject.fromObject(sendGet);       
                 String access_token=json.getString("access_token"); //凭证
                 System.out.println("获取的access_token:"+access_token);
                 int expires_in= json.getInt("expires_in"); //凭证有效时间,单位:秒
                 System.out.println("有效的时间:"+expires_in);
                 System.out.print("获取凭证成功");
                 System.out.println("返回的数据:"+access_token);
                 Map<String, Object> map = new HashMap<String, Object>();
                 map.put("access_token", access_token);
                 map.put("expires_in", expires_in);
                 return map;
    }

这样就可以获取到接口凭证了,希望都微信开发的朋友会有一点帮助,如果有疑问请在下发评论。

 

 

2018-02-13 16:29:57 sinat_38273626 阅读数 620
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27832 人正在学习 去看看 秦子恒

1- java代码

网站实现扫描二维码关注微信公众号,如果已经关注公众号就自动登陆网站并获取其微信昵称,头像等信息,如果用户未关注就等用户关注公众号后自动登陆网站

     --如果用户已关注公众号,网站端直接自动登陆,如果没有关注,就等用户关注公众号之后网站端自动登陆

     (目前已经完成了这个功能,示例网址:http://www.bid-data.com/ 爱招标——免费实时标讯推送平台,为企业负责人及商务人员即时掌控招标动态、中标检索、竞争对手中标项目分析等服务平台。)

   做微信扫码登陆,生成二维码必须是微信公众号中绑定的域这个域名,网站生成不了二维码(网站与微信服务器不是同一个域名) ,而是调用微信系统的接口获取二维码,用户扫码后也是请求微信服务器 

   

实现思路
   1,微信的系统,提供生成带参数的二维码的接口,这个参数就是唯一值(场景值)
   2,网站调用微信系统,获取生成的二维码图片
   3,用户扫码会直接调用微信服务器,将用户访问微信服务器的信息记录到redis,key就是唯一值(场景值)
   4,网站端做轮训去查询redis中是否有这个唯一值的数据,如果有就获取用户信息登录,没有就五秒一次轮训,登录后就不在做轮训(从二维码弹出之后开始做轮训,关闭二维码后停止轮训)
   5,这里的唯一值是可以自己定义的,我用的是截取了几位的时间戳 

实现步骤
(1)微信端:写一个获取带参数的临时二维码接口。
  // 临时二维码 
    private final static String QR_SCENE = "QR_SCENE";  
    // 永久二维码  
    private final static String QR_LIMIT_SCENE = "QR_LIMIT_SCENE";  
    // 永久二维码(字符串)  
    private final static String QR_LIMIT_STR_SCENE = "QR_LIMIT_STR_SCENE";   
    // 创建二维码  
    private String create_ticket_path = "https://api.weixin.qq.com/cgi-bin/qrcode/create";  
    // 通过ticket换取二维码  
    private String showqrcode_path = "https://mp.weixin.qq.com/cgi-bin/showqrcode";  

    @RequestMapping("getQrcode")
    public @ResponseBody String getQrcode(@RequestParam(value = "sceneId")int sceneId) throws Exception{


        String ticket = createTempTicket(tokenService.getToken(),"2592000",sceneId);
        LOGGER.info("get wechat qrcode  ==> start");
        LOGGER.info("sceneId :"+sceneId);
        LOGGER.info("ticket :"+ticket);
        LOGGER.info("get wechat qrcode  ==> end");
        return ticket;
    }
    /** 
     * 创建临时带参数二维码 
     * @param accessToken 
     * @expireSeconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。 
     * @param sceneId 场景Id 
     * @return 
     */  
    public String createTempTicket(String accessToken, String expireSeconds, int sceneId) {  

        TreeMap<String,String> params = new TreeMap<String,String>();  
        params.put("access_token", accessToken);  
        Map<String,Integer> intMap = new HashMap<String,Integer>();
        intMap.put("scene_id",sceneId);  
        Map<String,Map<String,Integer>> mapMap = new HashMap<String,Map<String,Integer>>();  
        mapMap.put("scene", intMap);  

        Map<String,Object> paramsMap = new HashMap<String,Object>();  
        paramsMap.put("expire_seconds", expireSeconds);  
        paramsMap.put("action_name", QR_SCENE);  
        paramsMap.put("action_info", mapMap);  
        String data = new Gson().toJson(paramsMap);  
        String tse = HttpRequestUtil.HttpsDefaultExecute(HttpRequestUtil.POST_METHOD,create_ticket_path,params,data);  

        JSONObject jsonObject = JSONObject.fromObject(tse);
        LOGGER.info("ticket :"+jsonObject.getString("ticket"));

     return showqrcode_path+"?ticket="+jsonObject.getString("ticket");
 }
accessToken就是调用微信接口的凭证token
(2)网站端:网站写一个调用微信生成二维码的接口

    @RequestMapping("getQrcode")
    public @ResponseBody Hashtable getQrcode(int sceneId){

        System.out.println(sceneId);

        Hashtable param = new Hashtable();
        param.put("sceneId", sceneId);

        String qrcodePath = HttpUtil.postRequest(Constant.getValue("get_qrcode"), param);

        System.out.println(" qrcodePath ==> "+qrcodePath);
        param.put("path", qrcodePath);
        return param;
    }
直接使用http调用接口就行,Constant.getValue("get_qrcode")这个就是微信提供二维码接口的url

(3)微信端:微信处理用户请求(这个地址是微信公众号填的那个地址,微信服务器会将所有用户请求转发到这个地址)

       // 事件推送
            else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {
                // 事件类型
                String eventType = requestMap.get("Event");
                // 关注
                if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {

                    //获取用户信息
                    String requestUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID";
                    requestUrl = requestUrl.replace("ACCESS_TOKEN", tokenService.getToken())
                            .replace("OPENID", fromUserName);
                    JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET",null);
                    String nickname = jsonObject.getString("nickname");
                    String address = jsonObject.getString("country")+"-"+jsonObject.getString("province")+"-"+jsonObject.getString("city");
                    String headimgurl = jsonObject.getString("headimgurl");

            //将用户信息存入redis,key为唯一值(场景值)
                    Hashtable params = new Hashtable();
                    params.put("phoneIme", fromUserName);
                    params.put("state", 1);
                    params.put("location", address);
                    params.put("realName", nickname);
                    params.put("nickname", nickname);
                    params.put("headimgurl", headimgurl);
                    if(StringUtils.isNotBlank(eventKey)){
                        redisCacheTool.setDataToRedis(eventKey.replace("qrscene_", ""), 3600, params);
                        System.out.println("qrcode redis key ==> "+eventKey.replace("qrscene_", ""));
                        params.put("equipmentType", eventKey);
                    }
            //入库
                    HttpUtil.postRequest(Constant.getValue("UPDATE_USER"), params);

                }
                // 取消关注
                else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {
                    // TODO 取消订阅后用户不会再收到公众账号发送的消息,因此不需要回复
                    Hashtable params = new Hashtable();
                    params.put("phoneIme", fromUserName);
                    params.put("state", 0);
                    HttpUtil.postRequest(Constant.getValue("UPDATE_USER_ANS"), params);

                }
                // 扫描带参数二维码
                else if (eventType.toLowerCase().equals(MessageUtil.EVENT_TYPE_SCAN)) {
                    // TODO 处理扫描带参数二维码事件
if(StringUtils.isNotBlank(eventKey)){

                        String requestUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID";
                        //获取用户信息
                        requestUrl = requestUrl.replace("ACCESS_TOKEN", tokenService.getToken())
                                .replace("OPENID", fromUserName);
                        JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET",null);
                        String nickname = jsonObject.getString("nickname");
                        String address = jsonObject.getString("country")+"-"+jsonObject.getString("province")+"-"+jsonObject.getString("city");
                        String headimgurl = jsonObject.getString("headimgurl");
              //将用户信息存入redis,key为唯一值(场景值)
                        Hashtable params = new Hashtable();
                        params.put("nickname", nickname);
                        params.put("headimgurl", headimgurl);
                        params.put("location", address);
                        redisCacheTool.setDataToRedis(eventKey, 3600, params);
                        System.out.println("qrcode redis key ==> "+eventKey);
                    }


                    respContent = "返回的信息";
                    textMessage.setContent(respContent);
                    respXml = MessageUtil.messageToXml(textMessage);
                }
(4)网站端:登陆页面中做轮训,每隔几秒查询一次redis,如果有用户信息就登陆

        var timestamp = new Date().getTime() + "";
    var str = timestamp.substring(8, timestamp.length);

        window.setInterval(function() {

        getUser(cont);

    }, 10000);

        function getUser() {
        $.ajax({
            type : 'get',
            data : {
                sceneId : str
            },
            dataType : 'json',
            url : "getUser.do",
            success : function(data) {

                if (data.msg == "success") {
                    location.reload(); 
                }

            },
            error : function(data) {

                if (data.msg == "success") {
                    location.reload();
                }

            }
        });
    }        
2017-08-11 17:41:17 a57571737 阅读数 530
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27832 人正在学习 去看看 秦子恒

这里写图片描述
第一次开发微信版网页,对最重要的获取微信OpenId,特此记录下来

1.首先得有appid和appsecret
复制代码

1 1. public class WeiXin {
2
3 public static string appid {
4 get {
5 string _appid = “wx3xxxxxxxxxxxxxxx”;
6 return _appid;
7 }
8 }
9 public static string aseret {
10 get {
11 string appsecret = “b6719276d539796d94bxxxxxxxxxxxxxxx”;
12 return appsecret;
13 }
14 }
15
16 }

复制代码

2.只获取用户的openID,,在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面,以snsapi_base为scope发起的网页授权,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(下面代码中的url参数就是回调页,静态的可以写成:string url = https://wx.baidu.com/controller/GetOpenId,注意URL需要进行HttpUtility.UrlEncode(url)编码,还有回调页的域名需要和微信公众号里面设置的回调域名相同)
复制代码

1 public class ApplyVIPController : Controller
2 {
3
4 // GET: /ApplyVIP/
5
6 public ActionResult Index(string url)
7 {
8 string _url = string.Format(“https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state={2}#wechat_redirect”,
9 WeiXin.appid,
10 url,//回调页URL
11 Guid.NewGuid().ToString(“N”));
12 return Redirect(_url);//这里微信会自动取出回调页URL,并且跳转到该url所属的页面
13 }

复制代码

3.获取code,并且通过code获取Openid,正确时返回的JSON数据包如下:{ “access_token”:”ACCESS_TOKEN”, “expires_in”:7200, “refresh_token”:”REFRESH_TOKEN”, “openid”:”OPENID”, “scope”:”SCOPE” },这里面就包含了所需要的OPENID
复制代码

   //controller

public string GetOpenId() {
string code = requset.querystring[“code”];
string openid = “”;
string json = “”;
string url = string.Format(“https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code “//通过appid,appaseret,code
, WeiXin.appid, WeiXin.aseret, code);
HttpQuery.Get(url, null, msg => {
json = msg;
});
JObject job = (JObject)JsonConvert.DeserializeObject(json);
openid = job[“openid”].ToString();
return openid;
}

复制代码

4.请求获取Openid的httpquery.get()方法
复制代码

public class HttpQuery {
    private static readonly string DefaultUserAgent =
        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";

    public static void Get(string url, object data, Action<string> callback) {
        IDictionary<string, string> parameters = Getparameters(data);

        if (!(parameters == null || parameters.Count == 0)) {
            url += "?";
            foreach (var item in parameters) {
                url += item.Key + "=" + item.Value + "&";
            }
        }
        CreateGetHttpResponse(url, null, null, null, callback);
    }
    /// <summary>  
    /// 创建GET方式的HTTP请求  
    /// </summary>  
    /// <param name="url">请求的URL</param>  
    /// <param name="timeout">请求的超时时间</param>  
    /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>  
    /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>  
    /// <returns></returns>  
    private static HttpWebResponse CreateGetHttpResponse(string url, int? timeout, string userAgent,
        CookieCollection cookies, Action<string> callback, string encoding = "utf-8") {
        if (string.IsNullOrEmpty(url)) {
            return null;
            //throw new ArgumentNullException("url");
        }
        try {
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            request.Method = "GET";
            request.UserAgent = DefaultUserAgent;
            if (!string.IsNullOrEmpty(userAgent)) {
                request.UserAgent = userAgent;
            }
            if (timeout.HasValue) {
                request.Timeout = timeout.Value;
            }
            if (cookies != null) {
                request.CookieContainer = new CookieContainer();
                request.CookieContainer.Add(cookies);
            }

            HttpWebResponse httpWebResponse = request.GetResponse() as HttpWebResponse;

            StreamReader reader = new StreamReader(httpWebResponse.GetResponseStream(),
                System.Text.Encoding.GetEncoding(encoding));

            string html = "";
            //获取请求到的数据
            html = reader.ReadToEnd();
            //关闭
            httpWebResponse.Close();
            reader.Close();

                callback(html);
                return httpWebResponse;
            }
        } catch {
            callback(null);
        }
        return null;
    }

}

微信开发

阅读数 913

微信开发之JSSDK调用

阅读数 20068

没有更多推荐了,返回首页