android 微信开发
2018-04-17 16:58:49 zmd9999 阅读数 776

在微信开发过程中,有用来将数据保存在本地的API 对 本地数据进行设置(wx.setStorage-异步、wx.setStorageSync-同步),获取(wx.getStorage-异步、wx.getStorageSync-同步、wx.getStorageInfo-异步,wx-getStorageInfoSync-同步),删除(wx.removeStorage-异步,wx.removeStorageSync-同步)和清理(wx.clearStorage-异步、wx.clearStorageSync-同步)


注:同一个微信用户,同一个小程序 storage 上限为 10MB。localStorage 以用户维度隔离,同一台设备上,A 用户无法读取到 B 用户的数据。


例子:




wx.setStorage-异步、wx.setStorageSync-同步  中两者的不同:

1.参数不同,异步设置数据有回调方法,同步设置没有

2.设置方法不同。



在这里,因为异步获取data数据,代码先执行

console.log(this.data.stu3)
后执行
console.log(res.data)

将res.data传值给data中的stu3,采用下面的方法:


注意:不可以直接用this.setData({}),因为success函数是一个闭包,this在该函数中不起作用,所以重新定义一个新的对象that。





例子:



实例代码:





注:1.同步事件 抛出错误采用fail事件,异步采用 try{}catch(){}

代码API参数截图链接:(官方)

https://developers.weixin.qq.com/miniprogram/dev/api/data.html#wxremovestoragesynckey





2018-10-22 21:19:04 jyluwen 阅读数 1087

       之前下载了微信开发者工具,最近一直提示下载更新。因为嫌麻烦,就没有更新。结果今天微信开发者工具竟然打不开了!好吧!以后还是经常更新比较好!

  遇到了微信开发者工具打不开的问题,就重新下载了最新版的微信开发者工具!但是下载完了以后,却发现打不上汉字,我的天呀!网上搜索还是微信开发者工具自身的bug,需要重新启动一下才可以使用。好吧,我又关了重新启动了一下,才可以正常使用。

   经验教训:1.需要经常更新微信开发者工具,别等到有了问题,如打不开,进不去编辑页面,才重新下载!会影响工作效率。不过如果是更新了,依然会出现这个问题,那就只能重新下载了!

       2.重新更新了以后,会出现打不上中文汉字的问题,只能输入英文,输入中文就会闪一下没了。解决方案:关闭微信开发者工具,再重新打开!

什么时候我写文章也能如此就好了!老话说:“读书破问卷,下笔如有神”,想来我读书还是没有读到位呀!

2018-02-06 10:36:25 u012279647 阅读数 442

微信开发

版权声明:本文为博主原创文章,博客地址:http://blog.csdn.net/u012279647/article/details/79268033,未经博主允许不得转载。

class HomeBaseController extends BaseController
{
    private $appId;
    private $appSecret;

    public function _initialize()
    {

        $this->appId = '';

        $this->appSecret = '';
        Session::set('openid_session','');

        $openid_ss = Session::get('openid_session');
        if(!$openid_ss){
            $openid_s = $this -> GetOpenid();
             Session::set('openid_session',$openid_s['openid']);
            Session::set('userinfo_session',$openid_s);
        }
    }

    /**
     * 微信
     */
    public function GetOpenid()
    {
        //通过code获得openid
        if (!isset($_GET['code'])){
            //触发微信返回code码
//            $baseUrl = urlencode('http://bbsd.yllfbaobao.cn/portal/wechat/GetOpenid');
            $baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
//           print_r($baseUrl);die();
            $url = $this->__CreateOauthUrlForCode($baseUrl,1);
            Header("Location: $url");
            exit();
        } else {
            //获取code码   ,以获取openid
            $code = $_GET['code'];
            $data = $this->GetOpenidFromMp($code);
            $urlObj = [];
            $urlObj["access_token"] =  $data['access_token'];
            $urlObj["openid"] = $data['openid'];
//            $urlObj["lang"] = 'zh_CN';
            $bizString = $this->ToUrlParams($urlObj);
            $url = 'https://api.weixin.qq.com/sns/userinfo?'.$bizString;
            //获取用户信息,openid,昵称,头像。
            $userinfo = json_decode($this->httpGet($url),true);
            //查取数据库信息,核对openid是否存在 存数据库 
        //     $user = new UserModel;
        //     $openid = $user->where('openid',$userinfo['openid'])->find();
            if(empty($openid)){
                //存数据库  
            }
         }
        // return $userinfo['openid'];
        return $userinfo;
//        Session::set('openid_s',$userinfo['openid']);
//        return redirect('Index/index');
    }
    /**
     *
     * 通过code从工作平台获取openid机器access_token
     * @param string $code 微信跳转回来带上的code
     *
     * @return openid
     */
    public function GetOpenidFromMp($code)
    {
        $url = $this->__CreateOauthUrlForOpenid($code);
        //初始化curl
        $ch = curl_init();
        //设置超时
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE);
        curl_setopt($ch, CURLOPT_TIMEOUT, 500);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        // if(WechatConfig::CURL_PROXY_HOST != "0.0.0.0"
        //     && WechatConfig::CURL_PROXY_PORT != 0){
        //     curl_setopt($ch,CURLOPT_PROXY, WechatConfig::CURL_PROXY_HOST);
        //     curl_setopt($ch,CURLOPT_PROXYPORT, WechatConfig::CURL_PROXY_PORT);
        // }
        //运行curl,结果以jason形式返回
        $res = curl_exec($ch);
        curl_close($ch);
        //取出openid
        $data = json_decode($res,true);
        return $data;
    }
    public function httpGet($url) {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_TIMEOUT, 500);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_URL, $url);

        $res = curl_exec($curl);
        //dump($res);
        curl_close($curl);
        return $res;
    }
    /**
     *
     * 拼接签名字符串
     * @param array $urlObj
     *
     * @return 返回已经拼接好的字符串
     */
    private function ToUrlParams($urlObj)
    {
        $buff = "";
        foreach ($urlObj as $k => $v)
        {
            if($k != "sign"){
                $buff .= $k . "=" . $v . "&";
            }
        }

        $buff = trim($buff, "&");
        return $buff;
    }
    /**
     *
     * 构造获取code的url连接
     * @param string $redirectUrl 微信服务器回跳的url,需要url编码
     *
     * @return 返回构造好的url
     */
    private function __CreateOauthUrlForCode($redirectUrl,$state)
    {
        $urlObj["appid"] = $this->appId;
        $urlObj["redirect_uri"] = "$redirectUrl";
        $urlObj["response_type"] = "code";
        if($state == 1){
            $urlObj["scope"] = "snsapi_userinfo";
        }else if($state == 2){
            $urlObj["scope"] = "snsapi_base";
        }
        $urlObj["state"] = "STATE"."#wechat_redirect";
        $bizString = $this->ToUrlParams($urlObj);
        return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString;

    }
    /**
     *
     * 构造获取open和access_toke的url地址
     * @param string $code,微信跳转带回的code
     *
     * @return 请求的url
     */
    private function __CreateOauthUrlForOpenid($code)
    {
        $urlObj["appid"] = $this->appId;
        $urlObj["secret"] = $this->appSecret;
        $urlObj["code"] = $code;
        $urlObj["grant_type"] = "authorization_code";
        $bizString = $this->ToUrlParams($urlObj);
        return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString;
    }
    public function curlPost($url,$data=""){
        $ch = curl_init();
        $opt = array(
            CURLOPT_URL     => $url,
            CURLOPT_HEADER  => 0,
            CURLOPT_POST    => 1,
            CURLOPT_POSTFIELDS      => $data,
            CURLOPT_RETURNTRANSFER  => 1,
            CURLOPT_TIMEOUT         => 20
        );
        $ssl = substr($url,0,8) == "https://" ? TRUE : FALSE;
        if ($ssl){
            $opt[CURLOPT_SSL_VERIFYHOST] = 1;
            $opt[CURLOPT_SSL_VERIFYPEER] = FALSE;
        }
        curl_setopt_array($ch,$opt);
        $data = curl_exec($ch);
        //dump($data);
        curl_close($ch);
        return $data;

    }

    /**
     * @return code
     */
    public function code(){
        $host = $_SERVER['HTTP_HOST'];
        $code = $this ->httpGet($host.'/api/home/Index/index');
        print_r($code);
        $aa = \session('token');
        $this->pr($aa);
        $code =  json_decode($code,true);
        $token = $code['data']['token'];
        $token = (int)$token;

        session('token',$token);
        return $token;
    }

}
2017-09-20 10:06:46 towtotow 阅读数 3085

微信公众平台开发的一个重要作用,

就是把用户相关的行为转换成数据进行记录,

然后再根据这些数据进行分析,

制定公司的计划和决策。


6xierizhi.jpg


在这一节课中,

告诉你怎么把重要的数据写入到你的WEB服务器中…

微信开发写入log日志视频教程在线观看

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

2018-09-09 16:17:57 qq_41971087 阅读数 3247

在微信开发中,就有一些接口会涉及到获取接口凭证的接口,开发文档: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;
    }

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

 

 

Linux微信开发者工具安装

博文 来自: DestinyLordC

微信开发之JSSDK调用

阅读数 19863

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