微信公众开发之获取周边酒店信息

 更新时间:2016年11月25日 17:23  点击:1777
关注微信公众之后发送回复地理位置信息,即可回复周边附近的酒店信息列表,下面我就来给各位介绍利用php是怎么实现这个功能,希望全子对大家有帮助。
效果图:
严佳冬

并且附加上代码:

 代码如下 复制代码

<?php
 //将提交过来的信息接收
 
$signature = $_GET['signature'];
 
 $timestamp = $_GET['timestamp'];
 
 $nonce = $_GET['nonce'];
 
 $echostr = $_GET['echostr'];
 
 $token = "yanjiadong";
 
 //判断接入网站
 
 //进行字典排序
 $arr = array($token,$timestamp,$nonce);
 
 sort($arr);
 
 //完成字符串的拼接和sha1加密
 
 $result = sha1(join($arr));
 
 //判断生成的字符串和$signature是否相等,如果相等,直接输出$echostr,这样网站接入成功
 
 if($result==$signature){
 
 echo $echostr;
 
 }
 
 //接收微信公众账号接收到的信息
 $poststr = $GLOBALS["HTTP_RAW_POST_DATA"];
 
 $xmlObj = simplexml_load_string($poststr,'SimpleXMLElement',LIBXML_NOCDATA);
 
 $ToUserName = $xmlObj->ToUserName;
 
 $FromUserName = $xmlObj->FromUserName;
 
 $CreateTime = $xmlObj->CreateTime;
 
 $MsgType = $xmlObj->MsgType;
 
 $Content = $xmlObj->Content;
 
&nbsp;
 if($MsgType=='location'){
 
 $Location_X = $xmlObj->Location_X;
 
 $Location_Y = $xmlObj->Location_Y;
 
 $Scale = $xmlObj->Scale;
 
 $Label = $xmlObj->Label;
 
 $urlstr = "http://api.map.baidu.com/place/v2/search?&query=酒店&location=".$Location_X.",".$Location_Y."&radius=5000&output=json&ak=DESY8unmZnUlLB0mlowjuiRr";  //此处ak参数需要个人的百度开发序列号,自己去百度申请下就好了
 
 $jsonstr = file_get_contents($urlstr);
 
 $json = json_decode($jsonstr,true);
 
 $pic_640 = "http://api.map.baidu.com/staticimage?width=640&height=320&center=".$Location_Y.",".$Location_X."&zoom=15&markers=".$Location_Y.",".$Location_X."&markerStyles=l,";
 
 $pic_80 = "http://api.map.baidu.com/staticimage?width=80&height=80&center=".$Location_Y.",".$Location_X."&zoom=15&markers=".$Location_Y.",".$Location_X."&markerStyles=l,";
 
 $p_640 = file_get_contents($pic_640);
 
 file_put_contents('./images/640_'.$FromUserName.".png",$p_640);
 
 $p_80 = file_get_contents($pic_80);
 
 file_put_contents('./images/80_'.$FromUserName.".png",$p_80);
 
 echo pic_send($json['results']);
 
 }
 function pic_send($arr){
 global $ToUserName,$FromUserName;
 $str = "<xml>
 <ToUserName><![CDATA[".$FromUserName."]]></ToUserName>
 <FromUserName><![CDATA[".$ToUserName."]]></FromUserName>
 <CreateTime>".time()."</CreateTime>
 <MsgType><![CDATA[news]]></MsgType>
 <ArticleCount>".count($arr)."</ArticleCount>
 <Articles>";
 foreach($arr as $k=>$v){
 if($k==0){
 $picurl = "http://yanjiadong.net/weixin/images/640_".$FromUserName.".png";
 }else{
 $picurl = "http://yanjiadong.net/weixin/images/80_".$FromUserName.".png";
 }
 $str .="
 <item>
 <Title><![CDATA[".$v['name']." 地址:".$v['address']." 电话:".$v['telephone']."]]></Title>
 <Description><![CDATA[".$v['name']." 地址:".$v['address']." 电话:".$v['telephone']."]]></Description>
 <PicUrl><![CDATA[".$picurl."]]></PicUrl>
 <Url><![CDATA[http://api.map.baidu.com/place/detail?uid=".$v['uid']."&output=html&src=".$v['name']."&output=html]]></Url>
 </item>";
 }
 
 $str .= "</Articles></xml>";
 
 return $str;
 }
 
?>

本篇文章主要说明的是在php中,如何获取一个数组的第一个数组单元的值的方法。在php的内置函数中,获取数组元素值的函数主要有 reset next current prev end 这几个函数

reset (PHP 3, PHP 4, PHP 5)

函数定义 mixed reset ( array &array )

作用:该函数将 array 的内部指针倒回到第一个单元并返回第一个数组单元的值,如果数组为空则返回 FALSE。例如:

 

 代码如下 复制代码

<?php

$array=array('step one','step two','step three','step four');

echo reset($array);

//输出:step one
next (PHP 3, PHP 4, PHP 5)

函数定义 mixed next ( array &array )

作用:返回数组内部指针指向的下一个单元的值,或当没有更多单元时返回 FALSE。例如:

 代码如下 复制代码

<?php
$array=array('step one','step two','www','phpernote.com','step four');
echo next($array);


//输出:step two
警告:如果数组包含空的单元,或者单元的值是 0 则本函数碰到这些单元也返回 FALSE。要正确遍历可能含有空单元或者单元值为 0 的数组,参见 each() 函数。

current (PHP 3, PHP 4, PHP 5)

函数定义 mixed current ( array &array )

作用:返回当前被内部指针指向的数组单元的值,并不移动指针。初始指向插入到数组中的第一个单元。如果内部指针指向超出了单元列表的末端,current() 返回 FALSE。

警告:如果数组包含有空的单元(0 或者 "",空字符串)则本函数在碰到这个单元时也返回 FALSE。这使得用 current() 不可能判断是否到了此数组列表的末端。要正确遍历可能含有空单元的数组,用 each() 函数。

next() 和 current() 的行为类似,只有一点区别,在返回值之前将内部指针向前移动一位。这意味着它返回的是下一个数组单元的值并将数组指针向前移动了一位。如果移动指针的结果是超出了数组单元的末端,则 next() 返回 FALSE。

下面是相关函数的使用例子:

 代码如下 复制代码

<?php
$transport = array('foot', 'www', 'car', 'phpernote','com');
$mode = current($transport); // $mode = 'foot';
$mode = next($transport); // $mode = 'www';
$mode = next($transport); // $mode = 'car';
$mode = prev($transport); // $mode = 'www';
$mode = end($transport); // $mode = 'com';
$mode = current($transport); // $mode = 'com';
$mode = reset($transport); // $mode = 'foot';

很多时候需要输出一些 “纯” 字符串,也就是去除任何杂质(例如 Html 标签、空格之类的文本),输出的摘要就是如此,下面的这个函数可以帮你实现着一点:


例子

 代码如下 复制代码

function Bing_string_cleanr( $string ){
 $string = trim( $string );
 $string = strip_tags( $string );
 $string = htmlspecialchars( $string, ENT_QUOTES, 'UTF-8' );
 $string = str_replace( "n", "", $string );
 $string = trim( $string );
 return $string;
}

使用方法:

 

 代码如下 复制代码
echo Bing_string_cleanr( '内 容 <br> <html> asdfeiuonsdfje' );

删除空白

 代码如下 复制代码

<?php
$str = " This line containstliberal rn use of whitespace.nn";

// First remove the leading/trailing whitespace
//去掉开始和结束的空白
$str = trim($str);

// Now remove any doubled-up whitespace
//去掉跟随别的挤在一块的空白
$str = preg_replace('/s(?=s)/', '', $str);

// Finally, replace any non-space whitespace, with a space
//最后,去掉非space 的空白,用一个空格代替
$str = preg_replace('/[nrt]/', ' ', $str);

// Echo out: 'This line contains liberal use of whitespace.'
echo "<pre>{$str}</pre>";
?>

开发微信公众平台消息接口过程中,我们首先需要验证消息接口的有效性,验证通过后,才可以进行其他开发。首先我们来看一下微信公众平台给我的 PHP SDK

1、需要设置一个 TOKEN 信息

 代码如下 复制代码

efine("TOKEN", "weixin");

这个 TOKEN 信息可以由开发者自行设定。
2、有个 wechatCallbackapiTest 类,该类中含有3个方法:valid、responseMsg、checkSignature,其中方法valid、checkSignature是用作验证接口URL有效性用的,responseMsg是我们使用最多的方法,后续大部分的开发工作都会在这里完成。

在我们对接口进行有效性验证通过后,就不再需要进行验证了,这时我们就需要使用到 responseMsg 方法。那么如何保证接口验证通过后,不需要去切换其中的方法或修改其中的代码呢?

我是这样做的:

 代码如下 复制代码

public function indexAction()
{
 if(isset($_GET['echostr']))
 {
  $echoStr = $_GET["echostr"];

  //valid signature , option
  if($this->checkSignatureAction())
  {
   echo $echoStr;
   exit;
  }
 }
 else
 {
  $this->responseMsgAction();
 }

 return FALSE;
}

讲解一下:

因为在验证接口有效性时传递了个 echostr 参数,而在消息接口响应过程中没有这个参数,所有我们这里用这个参数来判断是验证接口还是接口响应:

 代码如下 复制代码

isset($_GET['echostr'])

因为公司要做一个项目活动在微信中要有这一样款游戏活动了,但自己不会写于是网上找到了一个作者写的方案下面我整理了一下可以用同时也分享给大家。

本来是不想写这篇博文的,但又怕网友被坑,我还是写一下。

下载 jquery扩展wScratchPad.js, 原站的页面打不开,我这里提供一个下载地址 http://file.111cn.net/upload/2014/4/wScratchPad-1.4.4.zip
然后(冷静),一些没节操的博主,直接转别人的文章,验证的过程都省了,应该坑了不是小白。我这里修正一下

在这个扩展里面,怎么才能过去用户的刮开的面积

$("#wScratchPad3").wScratchPad({
 cursor:'',  //设置鼠标的样式
 color:'gray' ,  //设置覆盖物的颜色,跟image2功能相斥
 width:"300",
 height:"100",
 image: "" //顶部的图片
// 更多配置相关的选项请看源码
 scratchUp: function(e, percent){
 if(percent > 60)
 {
 alert("sss");
 }
 }
 });

从上面的代码,看的出来,这个跟网上所谓的教程不一样,这里获取刮开的范围用到函数不是

scratchMove()
而是
scratchUp()

为嘛?看源码

 
scratchFunc: function(e, $this, event)
        {
            e.pageX = Math.floor(e.pageX - $this.canvas_offset.left);
            e.pageY = Math.floor(e.pageY - $this.canvas_offset.top);
 
            $this['scratch' + event](e, $this);
 
            if(this.settings.realtimePercent || event == "Up") {
                if($this.settings['scratch' + event]) $this.settings['scratch' + event].apply($this, [e, $this.scratchPercentage($this)]);
            }
        }

这里这个获取函数绑定的UP 而不是move
注意这里的wScratchPad是1.4.4最新版。

[!--infotagslink--]

相关文章

  • PHP成员变量获取对比(类成员变量)

    下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
  • php 获取用户IP与IE信息程序

    php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
  • Vue基于localStorage存储信息代码实例

    这篇文章主要介绍了Vue基于localStorage存储信息代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-16
  • php获取一个文件夹的mtime的程序

    php获取一个文件夹的mtime的程序了,这个就是时间问题了,对于这个问题我们来看小编整理的几个例子,具体的操作例子如下所示。 php很容易获取到一个文件夹的mtime,可以...2016-11-25
  • 如何获取网站icon有哪些可行的方法

    获取网站icon,常用最简单的方法就是通过website/favicon.ico来获取,不过由于很多网站都是在页面里面设置favicon,所以此方法很多情况都不可用。 更好的办法是通过google提供的服务来实现:http://www.google.com/s2/favi...2014-06-07
  • jquery如何获取元素的滚动条高度等实现代码

    主要功能:获取浏览器显示区域(可视区域)的高度 : $(window).height(); 获取浏览器显示区域(可视区域)的宽度 :$(window).width(); 获取页面的文档高度 $(document).height(); 获取页面的文档宽度 :$(document).width();...2015-10-21
  • jquery获取div距离窗口和父级dv的距离示例

    jquery中jquery.offset().top / left用于获取div距离窗口的距离,jquery.position().top / left 用于获取距离父级div的距离(必须是绝对定位的div)。 (1)先介绍jquery.offset().top / left css: 复制代码 代码如下: *{ mar...2013-10-13
  • C#微信开发之发送模板消息

    这篇文章主要为大家详细介绍了C#微信开发之发送模板消息的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • Jquery 获取指定标签的对象及属性的设置与移除

    1、先讲讲JQuery的概念,JQuery首先是由一个 America 的叫什么 John Resig的人创建的,后来又很多的JS高手也加入了这个团队。其实 JQuery是一个JavaScript的类库,这个类库集合了很多功能方法,利用类库你可以用简单的一些代...2014-05-31
  • iOS新版微信底部返回横条问题的解决

    这篇文章主要介绍了iOS新版微信底部返回横条问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-30
  • C#获取字符串后几位数的方法

    这篇文章主要介绍了C#获取字符串后几位数的方法,实例分析了C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • jquery获取tagName再进行判断

    如果是为了取到tagName后再进行判断,那直接用下面的代码会更方便: $(element).is('input') 如果是要取到标签用作到别的地方,可以使用一下代码: $(element)[0].tagName 或: $(element).get(0).tagName...2014-05-31
  • DOM XPATH获取img src值的query

    复制代码 代码如下:$nodes = @$xpath->query("//*[@id='main_pr']/img/@src");$prurl = $nodes->item(0)->nodeValue;...2013-10-04
  • 基于C#实现微信支付宝扫码支付功能

    为公司系统业务需要,这几天了解了一下微信和支付宝扫码支付的接口,并用c#实现了微信和支付宝扫码支付的功能。需要的朋友跟随小编一起看看吧...2020-06-25
  • PHP 如何获取二维数组中某个key的集合

    本文为代码分享,也是在工作中看到一些“大牛”的代码,做做分享。 具体是这样的,如下一个二维数组,是从库中读取出来的。 代码清单: 复制代码 代码如下: $user = array( 0 => array( 'id' => 1, 'name' => '张三', 'ema...2014-06-07
  • php获取汉字拼音首字母的方法

    现实中我们经常看到这样的说明,排名不分先后,按姓名首字母进行排序。这是中国人大多数使用的排序方法。那么在php程序中该如何操作呢?下面就分享一下在php程序中获取汉字拼音的首字母的方法,在网上搜到的大多数是有问题的...2015-10-23
  • Python爬取微信小程序通用方法代码实例详解

    这篇文章主要介绍了Python爬取微信小程序通用方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-29
  • C#实现的微信网页授权操作逻辑封装示例

    这篇文章主要介绍了C#实现的微信网页授权操作逻辑封装,分析了微信网页授权操作的原理、步骤并给出了C#实现的网页授权操作逻辑封装类,需要的朋友可以参考下...2020-06-25
  • 使用C#获取系统特殊文件夹路径的解决方法

    本篇文章是对使用C#获取系统特殊文件夹路径的解决方法进行了详细的分析介绍,需要的朋友参考下...2020-06-25
  • 基于JavaScript代码实现微信扫一扫下载APP

    有很多人在做微信的扫一扫下载。但是在微信更新之后微信将该功能给禁止掉了,也不能说是全面禁止吧,因为腾讯、微信是一家嘛,通过应用宝审核的应用好像还是可以通过扫一扫直接下载的,下面通过本篇文章给大家介绍微信扫一扫下载app的代码片段,感兴趣的朋友一起看看吧...2016-01-02