2018-09-15 11:22:09 swimming_in_IT_ 阅读数 139
  • PHP获取微信公众号网页授权和用户信息(code、access_...

    讲解用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户 基本信息,进而实现业务逻辑。 获取code、access_token、openid、用户昵称、地区、性别、头像等 官方文档 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Web_Developer_Tools .html#1 开发步骤 1、引导用户进入授权页面同意授权,获取code 2、通过code换取网页授权access_token(与基础支持中的access_token不同) 3、如果需要,开发者可以刷新网页授权access_token,避免过期 4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制) PHP获取微信公众号网页授权和用户信息(code、access_token、openid等) 01-PHP获取微信公众号网页授权和用户信息演示 02-官方文档概要和需要提前准备的 03-PHP获取网页返回内容 04-PHP获取微信用户网页授权同意 05-PHP拿到微信用户授权后的code信息 06-PHP获取access_token和openid 07-PHP获取微信用户所有数据 08-PHP获取微信用户头像、昵称、区域、性别

    98 人正在学习 去看看 黄菊华

以前一直做过微信的开发,毕竟微信开发是现在广大程序猿不得不做的一个开发。其中包括微信的支付,微信的oauth登录。但是一直都没有系统的去完成过一个微信的所有开发,略有遗憾。最近自己申请了一个微信的订阅号,下面记录下,微信的Token验证吧。

进行微信公众平台的开发,进行token验证是第一步,如下图所示。url填写自己的服务器地址。Token这里可以自定义,但是要和代码中的Token保持一致。

验证代码如下:

var crypto = require('crypto');
var url = require('url');
exports.wechat = function(req,res){
	var query = url.parse(req.url,true).query;
	var signature = query.signature;
	var timestamp = query.timestamp;
	var nonce = query.nonce;
	var echostr = query.echostr;
	if(check(timestamp,nonce,signature,"weixin")){
	res.end(echostr);
	}else{
	res.end("It is not from weixin");
	}
};


function check(timestamp,nonce,signature,token){
	var currSign,tmp;
	tmp = [token,timestamp,nonce].sort().join("");
	currSign = crypto.createHash("sha1").update(tmp).digest("hex");
	return (currSign === signature);
};

获取url中包含的signature,timestamp,nonce,echostr。然后将token,timestamp,nonce按照字典序排列。并且加密,再与接收到的signature进行比对,如果相同,则是来自微信的请求,反之则不是。在配置完了后,本来进行其他开发。到最后发现个人申请的订阅号并不能进行认证,所以,这次只能再忍着了。以后公司有类似的资源的话,再做吧。

2016-08-31 20:07:08 zwrj1130 阅读数 5303
  • PHP获取微信公众号网页授权和用户信息(code、access_...

    讲解用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户 基本信息,进而实现业务逻辑。 获取code、access_token、openid、用户昵称、地区、性别、头像等 官方文档 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Web_Developer_Tools .html#1 开发步骤 1、引导用户进入授权页面同意授权,获取code 2、通过code换取网页授权access_token(与基础支持中的access_token不同) 3、如果需要,开发者可以刷新网页授权access_token,避免过期 4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制) PHP获取微信公众号网页授权和用户信息(code、access_token、openid等) 01-PHP获取微信公众号网页授权和用户信息演示 02-官方文档概要和需要提前准备的 03-PHP获取网页返回内容 04-PHP获取微信用户网页授权同意 05-PHP拿到微信用户授权后的code信息 06-PHP获取access_token和openid 07-PHP获取微信用户所有数据 08-PHP获取微信用户头像、昵称、区域、性别

    98 人正在学习 去看看 黄菊华

云服务器 ECS 服务器中微信公众平台 Token 验证失败常见原因



很多的用户的程序后台在 ECS 服务器进行微信公众平台 Token 验证是显示失败如下图:

blob.png

 



1、非正常编辑文件(记事本,在线编辑),导致添加了 utf8 的 bom 签名

建议处理办法:使用多功能编辑器去除 bom。

 

2、php 文件结束符后包含换行或其他字符

  1. //文件开始
  2. ?>
  3. //文件结束

建议处理办法:去除多余的字符。

 

3. 程序 gzip 加密异常

建议处理办法:可临时取消程序 gzip 功能排查测试。

4. 服务器用户如果安装了安全狗或者云盾可能会拦截腾讯服务器的请求

建议处理办法:卸载安全狗,或者提示云盾设置白名单。

 

5. 虚拟主机使用临时域名去验证导致被系统拦截(适用于万网的虚拟主机)

建议处理办法:使用已经接入阿里云备案的正式域名来进行验证操作。



这个问题的最佳调试工具 curl,可以模拟微信请求 api 来判断问题

  1. curl http://xxx/index.php/api/xx

我的问题:

 

是因为php文件结束时候的空格回车符导致的。 



删除空格回车后验证成功。





2017-04-06 21:20:39 u011397277 阅读数 2978
  • PHP获取微信公众号网页授权和用户信息(code、access_...

    讲解用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户 基本信息,进而实现业务逻辑。 获取code、access_token、openid、用户昵称、地区、性别、头像等 官方文档 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Web_Developer_Tools .html#1 开发步骤 1、引导用户进入授权页面同意授权,获取code 2、通过code换取网页授权access_token(与基础支持中的access_token不同) 3、如果需要,开发者可以刷新网页授权access_token,避免过期 4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制) PHP获取微信公众号网页授权和用户信息(code、access_token、openid等) 01-PHP获取微信公众号网页授权和用户信息演示 02-官方文档概要和需要提前准备的 03-PHP获取网页返回内容 04-PHP获取微信用户网页授权同意 05-PHP拿到微信用户授权后的code信息 06-PHP获取access_token和openid 07-PHP获取微信用户所有数据 08-PHP获取微信用户头像、昵称、区域、性别

    98 人正在学习 去看看 黄菊华

好久没有更新博客,最近课余时间看看微信的开发,本文主要介绍如何认证微信的token,开启微信开发之旅。

首先我是申请了一个新浪云的一个应用,进行开发(SAE),主要利用php进行验证。


1.首先是修改配置,需要填写url 和 Token ,token 可以随便填写只要和服务器端的自己设置的token对应起来就可以了。


2.验证微信端发来的信息,用php代码进行验证,我将代码封装了一下,两个文件

weixin.php //实现

index.php  // 调用


wexin.php 代码如下

<?php       
   define("TOKEN", "yusw");
   
   class WeiXinConfirm{ 
       private function checkSignature()
       {
             //1.接收微信发过来的get请求过来的4个参数 
             $signature = $_GET["signature"];
             $timestamp = $_GET["timestamp"];
             $nonce = $_GET["nonce"]; //随机数
             
             //2.加密
             //1.将token,timestamp,once 三个参数进行字典序排序
             $tmpArr = array(TOKEN,$timestamp,$nonce);
             sort($tmpArr,SORT_STRING);
             
             //2.将三个参数字符串拼接成一个字符串进行sha1加密
             $tmpStr =  implode($tmpArr);
             $tmpStr =  sha1($tmpStr);

             //3.将 加密后的字符串与$signature对比
             if( $tmpStr == $signature ){
                 return true;
             }else{
                 return false;
             }
         }
         
         public function valid()
         {
             if ($this->checkSignature()){
                 echo $_GET["echostr"];
             }else{
                 echo "hello world";
             }
         }
     
 
   }

?>

主要有4步:

1.接收微信发过来的get请求过来的4个参数 

2.加密将token,timestamp,once 三个参数进行字典序排序
3.将三个参数字符串拼接成一个字符串进行sha1加密
4.将 加密后的字符串与$signature对比。


index.php 实现调用 ,代码如下

<?php
   require("weixin.php");
   
   $wx = new WeiXinConfirm();
   
   $wx->valid();
   


?>

success!


本文 

     完!




2016-10-18 14:25:05 qq_22172905 阅读数 1107
  • PHP获取微信公众号网页授权和用户信息(code、access_...

    讲解用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户 基本信息,进而实现业务逻辑。 获取code、access_token、openid、用户昵称、地区、性别、头像等 官方文档 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Web_Developer_Tools .html#1 开发步骤 1、引导用户进入授权页面同意授权,获取code 2、通过code换取网页授权access_token(与基础支持中的access_token不同) 3、如果需要,开发者可以刷新网页授权access_token,避免过期 4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制) PHP获取微信公众号网页授权和用户信息(code、access_token、openid等) 01-PHP获取微信公众号网页授权和用户信息演示 02-官方文档概要和需要提前准备的 03-PHP获取网页返回内容 04-PHP获取微信用户网页授权同意 05-PHP拿到微信用户授权后的code信息 06-PHP获取access_token和openid 07-PHP获取微信用户所有数据 08-PHP获取微信用户头像、昵称、区域、性别

    98 人正在学习 去看看 黄菊华

第一步:
打开你的aspx页面的后台文件(也就是.cs)在里面写如下方法

    #region 
        /// <summary>
        /// 验证微信签名
        /// </summary>
        /// *本方法的目的是将来源于微信服务器的token、timestamp、nonce三个参数进行字典序排序
        /// * 再将三个参数字符串拼接成一个字符串进行sha1加密然后与signature进行对比
        /// <returns></returns>
        private bool CheckSignature()
        {
             //获取从微信服务器发过来的signature 、timestamp和nonce
            string signature = Request.QueryString["signature"].ToString();
            string timestamp = Request.QueryString["timestamp"].ToString();
            string nonce = Request.QueryString["nonce"].ToString();
            //这里的Token来自于自己的变量声明 如public string Token = "tomyang1994";
            string[] ArrTmp = { Token, timestamp, nonce };
            Array.Sort(ArrTmp);     //字典排序
            string tmpStr = string.Join("", ArrTmp);
            tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
            tmpStr = tmpStr.ToLower();
            if (tmpStr == signature)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        private void Valid()
        {
            string echoStr = Request.QueryString["echoStr"].ToString();
            if (CheckSignature())
            {
                if (!string.IsNullOrEmpty(echoStr))
                {
                    //这个是打印出取得的信息,与验证token没有关系
                   只有CheckSignature()返回的是true,token就
                   已经验证成功了
                    Response.Write(echoStr);
                    Response.End();
                }
            }
        }
        #endregion

第二步:
就是在void Page_Load(object sender, EventArgs e)中调用第一步写的Valid()方法。

第三步:
完成上面两步后就进入你的微信开发者账号
基本配置—–>服务器配置
微信账号服务器配置图解
填完点击提交 ,提交成功就OK了。token验证就完成了 ,服务端代码可以注释掉了。

注:asp.net端要发布到IIS上,然后将外网IP或地址填写到服务器配置中的URL里,注意端口是80或者443,将内网转外网建议用花生壳,6元的认证费。

2016-03-14 15:01:37 u011466609 阅读数 8569
  • PHP获取微信公众号网页授权和用户信息(code、access_...

    讲解用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户 基本信息,进而实现业务逻辑。 获取code、access_token、openid、用户昵称、地区、性别、头像等 官方文档 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Web_Developer_Tools .html#1 开发步骤 1、引导用户进入授权页面同意授权,获取code 2、通过code换取网页授权access_token(与基础支持中的access_token不同) 3、如果需要,开发者可以刷新网页授权access_token,避免过期 4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制) PHP获取微信公众号网页授权和用户信息(code、access_token、openid等) 01-PHP获取微信公众号网页授权和用户信息演示 02-官方文档概要和需要提前准备的 03-PHP获取网页返回内容 04-PHP获取微信用户网页授权同意 05-PHP拿到微信用户授权后的code信息 06-PHP获取access_token和openid 07-PHP获取微信用户所有数据 08-PHP获取微信用户头像、昵称、区域、性别

    98 人正在学习 去看看 黄菊华

1、配置springMVC环境。

这里就不贴代码了。不知道的朋友,可以去看我的博客。

2、验证token

说明:在微信公众号测试平台中填写了正确的url、token后,微信会向填写的url地址发送一条get请求。该请求带有signature、timestamp、nonce、echostr参数。服务端返回echostr参数,则表示token验证成功。

@Controller
public class HelloWorldController {
    /**
     * 微信消息接收和token验证
     * @param model
     * @param request
     * @param response
     * @throws IOException
     */
    @RequestMapping("/hello")
    public void hello(Model model, HttpServletRequest request,HttpServletResponse response) throws IOException {
        boolean isGet = request.getMethod().toLowerCase().equals("get");
        PrintWriter print;
        if (isGet) {
            // 微信加密签名
            String signature = request.getParameter("signature");
            // 时间戳
            String timestamp = request.getParameter("timestamp");
            // 随机数
            String nonce = request.getParameter("nonce");
            // 随机字符串
            String echostr = request.getParameter("echostr");
            // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
            if (signature != null && CheckoutUtil.checkSignature(signature, timestamp, nonce)) {
                try {
                    print = response.getWriter();
                    print.write(echostr);
                    print.flush();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    }

请求校验工具类

public class CheckoutUtil {
    // 与接口配置信息中的Token要一致
    private static String token = "Javen";

    /**
     * 验证签名
     * 
     * @param signature
     * @param timestamp
     * @param nonce
     * @return
     */
    public static boolean checkSignature(String signature, String timestamp, String nonce) {
        String[] arr = new String[] { token, timestamp, nonce };
        // 将token、timestamp、nonce三个参数进行字典序排序
        // Arrays.sort(arr);
        sort(arr);
        StringBuilder content = new StringBuilder();
        for (int i = 0; i < arr.length; i++) {
            content.append(arr[i]);
        }
        MessageDigest md = null;
        String tmpStr = null;

        try {
            md = MessageDigest.getInstance("SHA-1");
            // 将三个参数字符串拼接成一个字符串进行sha1加密
            byte[] digest = md.digest(content.toString().getBytes());
            tmpStr = byteToStr(digest);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        content = null;
        // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信
        return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
    }

    /**
     * 将字节数组转换为十六进制字符串
     * 
     * @param byteArray
     * @return
     */
    private static String byteToStr(byte[] byteArray) {
        String strDigest = "";
        for (int i = 0; i < byteArray.length; i++) {
            strDigest += byteToHexStr(byteArray[i]);
        }
        return strDigest;
    }

    /**
     * 将字节转换为十六进制字符串
     * 
     * @param mByte
     * @return
     */
    private static String byteToHexStr(byte mByte) {
        char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
        char[] tempArr = new char[2];
        tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
        tempArr[1] = Digit[mByte & 0X0F];
        String s = new String(tempArr);
        return s;
    }
    public static void sort(String a[]) {
        for (int i = 0; i < a.length - 1; i++) {
            for (int j = i + 1; j < a.length; j++) {
                if (a[j].compareTo(a[i]) < 0) {
                    String temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
            }
        }
    }
}

3、在微信公众号测试平台中,填写url、token

这里写图片描述

注:

1、url为项目路径且必须可以通过外网80端口访问
2、token必须和项目中token一致

微信开发-Token处理

阅读数 486

微信开发中的Token处理

博文 来自: keplerpig
没有更多推荐了,返回首页