2017-08-23 11:06:20 qq_22823581 阅读数 340
  • PHP微信接口开发

    微信公众平台是运营者通过公众号为微信用户提供资讯和服务的平台,而公众平台开发接口则是提供服务的基础,开发者在公众平台网站中创建公众号、获取接口权限后,可以通过阅读本接口文档来帮助开发...

    15703 人正在学习 去看看 传智



token 是在网页中和微信服务器商量好的哦。下次使用的时候直接代码复制即可使用

<?php
/**
 * Created by PhpStorm.
 * User: liaosp
 * Date: 2017/8/23
 * Time: 10:36
 */

$timestamp = $_GET['timestamp'];
$nonce = $_GET['nonce'];
$token = 'weixin';  //在网页中配置的token
$signature = $_GET['signature'];
$array = array($timestamp,$nonce,$token);
$tmpstr= implode('',$array);
$tmpstr = sha1($tmpstr);
if ($tmpstr == $signature){
    echo $_GET['echostr'];
    exit;
}


有时候没有用是有bom头的影响

在echo 前面添加     ob_clean();    清楚前面的输出

2018-12-26 14:35:41 lxc_yinfengpolang 阅读数 674
  • PHP微信接口开发

    微信公众平台是运营者通过公众号为微信用户提供资讯和服务的平台,而公众平台开发接口则是提供服务的基础,开发者在公众平台网站中创建公众号、获取接口权限后,可以通过阅读本接口文档来帮助开发...

    15703 人正在学习 去看看 传智

这段时间研究微信公众号,发现了很多坑,现在贴出来做个记录

1、微信公众号在做开发的时候,首先就是对微信的服务接口的配置。让微信能够响应我们的接口。官方的接口文档吧可以这么说,你懂的或者了解他了吧可以说简单些,但是当你刚接触的时候,你会感觉写的是啥啊,压根看不懂。

好了步入正题

首先接口配置,这个就不多说了,图上标的很清楚

这个配置好了就是后台接收微信的 验证参数了先来看看微信对这个接口的说明吧

就四个参数,你需要对这几个参数进行加解密啊等操作,然后确认是不是微信发送来的请求,完事后,看到图片上标红的地方了吧,原样返回。

1、什么是原样返回,我接收的string类型,那么我这个接口返回spring类型就ok了,但是问题来了 验证token是吧

2、继续怀疑微信发来的参数都是加密的,需不需要给他解密下返回原来样子了(猜想,但是我明显勾选的的是明文啊),还是token验证失败

3、换个思路,是不是我这就return这种echostr不对了。那就像原来最老的那种返回,咱们把参数直接write到response里面

上图

@GetMapping("/welcome")
  public void checkName(@RequestParam(name = "signature") String signature,
                        @RequestParam(name = "timestamp") String timestamp,
                        @RequestParam(name = "nonce") String nonce,
                        @RequestParam(name = "echostr") String echostr,
                        HttpServletResponse response) throws IOException, AesException {
      System.out.println("-----------------------开始校验------------------------");
      //排序
      String sortString = CheckoutUntil.sort(TOKEN, timestamp, nonce);
      //加密
      String myString = CheckoutUntil.sha1(sortString);
      //校验
      if (myString != null && myString != "" && myString.equals(signature)) {
          System.out.println("签名校验通过");
          //如果检验成功原样返回echostr,微信服务器接收到此输出,才会确认检验完成。
          PrintWriter out = null;
          try {
              out = response.getWriter();
              // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,否则接入失败
              out.print(echostr);
          } catch (IOException e) {
              e.printStackTrace();
          } finally {
              out.close();
          }
      }

这样返回,发现验证成功了。

网上的说法五法八门的,有的说是要返回xml文本,有的说返回的格式不对,还有的说返回的编码格式不对。最后这种直接写的方法我是配置成功了。后来有人问我为啥一直配置失败,我把我的这个给他,反正他也成功了,记录下。你要成功了点个赞吧哈哈哈 

 

 

2017-04-21 10:47:13 QUITE_CGY 阅读数 5654
  • PHP微信接口开发

    微信公众平台是运营者通过公众号为微信用户提供资讯和服务的平台,而公众平台开发接口则是提供服务的基础,开发者在公众平台网站中创建公众号、获取接口权限后,可以通过阅读本接口文档来帮助开发...

    15703 人正在学习 去看看 传智
微信接口配置信息总是配置失败 - DAWN - CGYDAWN
 微信接口配置信息修改是微信测试开发经常用到的,但是本人在最近学习中经常配置不成功,而且token并没有错误,经过了多次查看代码,甚至将微信官方代码放上去配置仍然不行后,终于在茫茫百度中找到了答案,没错,那就是ob_clean()函数,一个PHP自带的函数,这个函数帮我解决了搞了一整天都搞不定的问题,配置终于成功了!

public function valid()
{
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
ob_clean();
echo $echoStr;
exit;
}
}

2019-01-07 16:17:01 weixin_42980713 阅读数 228
  • PHP微信接口开发

    微信公众平台是运营者通过公众号为微信用户提供资讯和服务的平台,而公众平台开发接口则是提供服务的基础,开发者在公众平台网站中创建公众号、获取接口权限后,可以通过阅读本接口文档来帮助开发...

    15703 人正在学习 去看看 传智

微信开发中,图灵机器人回复、天气、翻译、美食、地图、二维码功能,随处可见。大小网站、APP都在运用这项技术在项目中。今天简单介绍一下图灵机器人回复,天气接口调用、翻译接口,希望对朋友们有用。

效果案例:

思路很简单,首先,token要一致,然后在浏览器上跑起来, 回到微信平台配置后进行提交,显示配置成功,则OK!配置失败,检查token和代码规范,如果还不行,百度上有很多解决办法,不过有的没有用。可以试一试不用框架可不可以执行。

下面不多说,上代码:

<?php
/**
  * wechat php test
  */
 
//define your token
define("TOKEN","token可以随意些");//定义常量token值,与微信中的值进行对比
$wechatObj = new wechatCallbackapiTest();//实例化下面的类
//判断微信传过来的值是否存在
if(!isset($_GET['echostr'])){
//如果微信传过来的值存在执行下面方法
$wechatObj->responseMsg();
}else{
//不存在执行下面方法
$wechatObj->valid();
}
//$wechatObj->valid();
 //封装文件类
class wechatCallbackapiTest
{
    //定义微信传值不存在执行的方法,既然不存在值,那当然也就不需要返回什么了
    public function valid()
    {
        $echoStr = $_GET["echostr"];
 
        //valid signature , option
        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }
  //定义微信有值执行的方法
    public function responseMsg()
    {
        //get post data, May be due to the different environments
        $postStr = file_get_contents('php://input');    //全局变量的信息    可以接收
 
        //extract post data
        if (!empty($postStr)){
                //如果$postStr不为空
                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $RX_TYPE = trim($postObj->MsgType);
 
                switch($RX_TYPE)
                {
                    case "text":
                        $resultStr = $this->handleText($postObj);
                        break;
                    case "event":
                        $resultStr = $this->handleEvent($postObj);
                        break;
                    default:
                        $resultStr = "Unknow msg type: ".$RX_TYPE;
                        break;
                }
                echo $resultStr;
        }else {
            echo "";
            exit;
        }
    }
    //绑定图灵机器人,返回数据转化为微信使用的格式
    public function handleText($postObj)
    {
        $fromUsername = $postObj->FromUserName;
        $toUsername = $postObj->ToUserName;
        $keyword = trim($postObj->Content);
        $time = time();
        $textTpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[%s]]></MsgType>
                    <Content><![CDATA[%s]]></Content>
                    <FuncFlag>0</FuncFlag>
                    </xml>";             
        if(!empty($keyword ))
        {
        	//主要内容--机器人---天气接口---
            $msgType = "text";
        	if($keyword=="博客"){
                $contentStr = "YFeng888的博客地址是:https://blog.csdn.net/weixin_42980713";
            }else if($keyword=="天气"){
                 //创建函数调用图灵机器人接口
                $url = "http://apis.haoservice.com/weather?cityname=北京&key=99ae8b89d4a14c0881c2ac64c831cdd6"; 
              $send_info = file_get_contents($url);
              $c = json_decode($send_info,true);
              $contentStr = "【".$c['result']['today']['city']."天气预报】\n"." ".$c['result']['today']['date_y']."时发布"."\n\n实时天气\n".$c['result']['today']['weather'].$c['result']['today']['temperature'].$c['result']['today']['wind']."\n\n温馨提示:".$c['result']['today']['dressing_advice']."\n\n明天\n".$c['result']['future'][1]['temperature']." \n\n后天".$c['result']['future'][2]['temperature']."\n";
          }elseif($keyword=="经典语录"){
             //创建函数调用图灵机器人接口
            $url="http://apis.haoservice.com/lifeservice/JingDianYulu/getTypes?key=你自己的key";
              $send_info = file_get_contents($url);
              $json = json_decode($send_info,true);
              $contentStr=$json['result'];
          }else{
            //翻译接口
            $url = "http://apis.haoservice.com/efficient/robot?info=$keyword&address=&key=你自己的key";
              $send_info = file_get_contents($url);
              $json = json_decode($send_info,true);
              $contentStr =$json['result']['text'];
               file_put_contents("haoyu.txt",$contenStr);//写入日志到haoyu.txt文件内
          }
           
            // $contentStr = "Welcome to wechat world!";
            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
            echo $resultStr;
        }else{
            echo "Input something...";
        }
    }

    public function handleEvent($object)
    {
        $contentStr = "";
        switch ($object->Event)
        {
            case "subscribe":
                $contentStr = "感谢您关注【最帅男人帮】"."\n"."微信号:shuaigege"."\n"."卓越锦绣,名城苏州,我们为您提供苏州本地生活指南,苏州相关信息查询,做最好的苏州微信平台。"."\n"."目前平台功能如下:"."\n"."【1】 查天气,如输入:苏州天气"."\n"."【2】 查公交,如输入:苏州公交178"."\n"."【3】 翻译,如输入:翻译I love you"."\n"."【4】 苏州信息查询,如输入:苏州观前街"."\n"."更多内容,敬请期待...";
                break;
            default :
                $contentStr = "Unknow Event: ".$object->Event;
                break;
        }
        $resultStr = $this->responseText($object, $contentStr);
        return $resultStr;
    }
    
    public function responseText($object, $content, $flag=0)
    {
        $textTpl = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[text]]></MsgType>
                    <Content><![CDATA[%s]]></Content>
                    <FuncFlag>%d</FuncFlag>
                    </xml>";
        $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);
        return $resultStr;
    }
 
    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];    
                
        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
        
        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
}
 
?>

ok,亲测可行!

2018-11-30 01:26:49 Xiao_peng117 阅读数 192
  • PHP微信接口开发

    微信公众平台是运营者通过公众号为微信用户提供资讯和服务的平台,而公众平台开发接口则是提供服务的基础,开发者在公众平台网站中创建公众号、获取接口权限后,可以通过阅读本接口文档来帮助开发...

    15703 人正在学习 去看看 传智

问题很简单,只是不好找。

在配置微信分享内容的link里,链接要写全;

如http://www.baidu.com/index.html;

如果不加http://就会faild

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