本文描述了用PHP实现微信JS-SDK接口,选择相册、拍照、上传的方法。分享给大家参考,如下:
了解:微信上传界面是拍照,或者选择本地照片,上传到微信服务器,获取一个id,通过token和这个id获取图片,保存到服务器。
渲染:
通过微信js接口调用底层程序。Js文件需要引入和配置。
script src=' http :3358 RES . wx . QQ.com/open/js/jweixin-1 . 0 . 0 . js '/script wx . config({ debug : false,appId: 'wxed7996e9ad58345d ',timestamp: 1449717454,nonceStr: ' asdfasdfasdf ',signature:其中appId为微信公众平台Id,时间戳为当前时间戳,nonceStr为随机字符串,签名为签名。
签名是最重要的参数。要得到它有很多步骤。
先获得Access_token,可以存活两个小时,每天可以获得2000次。超过就拿不到了。
//获取access_token的两小时有效私有函数get _ access _ token(){ $ appid=c(' oauth _ config . appid ');$ app secret=C(' oauth _ config . app secret ');$ URL=' https://API . weixin . QQ.com/CGI-bin/token?grant _ type=client _ credential appid='。$appid。secret='。$ appsecret$ rurl=file _ get _ contents($ URL);$rurl=json_decode($rurl,true);if(array_key_exists('errcode ',$ rurl)){ return false;} else { $ access _ token=$ rurl[' access _ token '];返回$ access _ token}}然后获取jsticket
//私有函数getjsticket(),有效期两小时获取jsticket {//只能调用这个类,不能调用所有继承的类,更不要说公共调用$ access _ token=$ this-get _ access _ token();$ URL=' https://API . weixin . QQ.com/CGI-bin/ticket/getticket?access_token='。$access_token。type=jsapi ';//两小时内有效$ rurl=file _ get _ contents($ URL);$rurl=json_decode($rurl,true);if($rurl['errcode']!=0){返回false} else { $ js ticket=$ rurl[' ticket '];返回$ jsticket}}然后获取签名,该签名由多个参数拼接加密而成,是有效的。
//get signature私有函数get signature(){ $ nonce str=' ';$ jsapi _ ticket=$ this-getjsticket();$ timestamp=time();$ URL=' http://Zhu Dian Bao . Dian dodo.com/index . PHP?g=Openerm=Comtata=open ';$string1='jsapi_ticket='。$jsapi_ticket。noncestr='。$ noncestr。时间戳='。$时间戳。url='。$ url$ signature=sha1($ string 1);返回$签名;}一旦配置好,就可以使用了。我用了两个功能,一个是选择照片,一个是上传照片。
函数chooseImage(obj){ //选择一张wx.chooseImage({ count: 1,//默认9size type: ['original ',' compressed'],//可以指定是原始还是压缩。默认情况下,两者都有sourcetype: ['相册','相机']。//可以指定来源是相册还是相机。默认情况下,两者都有success3360函数(RES){ varlocal ids=RES . local ids;//返回所选照片的localId列表。LocalID可以作为img标签的src属性来显示图片$(obj)。attr('src ',LocalIdS);//上传照片wx . uploadimage({ local id : ' ' local ids,isshowprogresstips 3360 1,success : function(RES){ serverid=RES . serverid;$(obj)。下一个()。val(服务器标识);//附上上传成功后得到的值} });} });}选择照片返回的localIds很有意思,可以用来上传和显示img的src属性中的图片。
上传成功后,获取一个serverId,通过它可以下载上传到微信服务器的图片文件,并保存到自己的服务器上。
//获取图片地址私有函数getmedia($access_token,$media_id,$ foldername){ $ URL='http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=' .$access_token .media_id=' .$ media _ idif(!file_exists(' ./上传/用户证书/' .$foldername)) { mkdir(' ./上传/用户证书/' .$foldername,0777,true);} $targetName=' ./上传/用户证书/' .“$foldername ”./'.日期(' YmdHis ').兰特(1000,9999). jpg ';$ ch=curl _ init($ URL);//初始化$fp=fopen($targetName,' WB ');//打开写入curl_setopt($ch,CURLOPT_FILE,$ FP);//设置输出文件的位置,值是一个资源类型curl_setopt($ch,CURLOPT_HEADER,0);curl _ exec($ ch);curl _ close($ ch);fc输(FP美元);返回$ targetName}防止图片名称相同,加一个边缘随机数,因为在同一秒钟可能会上传多张照片。
$targetName=' ./上传/用户证书/' .$foldername .'/'.日期(' YmdHis ').兰特(1000,9999). jpg ';这个服务器身份以表单的形式提交到服务器,然后对其进行写入文件,获取地址,并把地址保存到服务器中。
微信的射流研究…与jquery不冲突,可以共同使用。
附上牛逼的JSSDK类
?phpclass JSSDK { private $ appId private $ appSecretpublic function _ _ construct($ appId,$ appSecret){ $ this-appId=$ appId;$ this-appSecret=$ appSecret;}公共函数GetSignPackage(){ $ JSapiticket=$ this-GetJSapiticket();//注意统一资源定位器一定要动态获取,不能硬编码$protocol=(!空($ _ SERVER[' HTTPS '])$ _ SERVER[' HTTPS ']!==' off ' | | $ _ SERVER[' SERVER _ PORT ']==443)?'https://' : 'http://';$ URL=' $ protocol $ _ SERVER[HTTP _ HOST]$ _ SERVER[REQUEST _ URI]';$ timestamp=time();$ non estr=$ this-create non estr();//这里参数的顺序要按照键值美国信息交换标准代码码升序排序$ string=' jsapi _ ticket=$ jsapticket non estr=$ non estr timestamp=$ timestampur=$ URL ';$ signature=sha1($ string);$ sign package=array(' appId '=$ this-appId,' nonceStr '=$ nonceStr,' timestamp'=$timestamp,' url'=$url,' signature'=$signature,' raw string '=$ string);返回$ signPackage}私有函数createnoncrest($ length=16){ $ chars=' abcdefghijklmnopqrstuvwxyzabbcdefghijklmnopqrstuvwxyz 0123456789 ';$ str=for($ I=0;一美元长度;$i ) { $str .=substr($chars,mt_rand(0,strlen($chars) - 1),1);}返回$ str}私有函数getJsApiTicket(){//jsapi _ ticket应该全局存储与更新,以下代码以写入到文件中做示例$ data=JSON _ decode(file _ get _ contents(' jsapi _ ticket。JSON’);if($ data-expire _ time time()){ $ accessToken=$ this-getAccessToken();//如果是企业号用以下统一资源定位器获取门票//$ URL='https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access _ token=$ AccessToken ';$ URL='https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi access _ token=$ accessToken ';$ RES=JSON _ decode($ this-HttpGet($ URL));$ ticket=$ RES-ticket;if($ ticket){ $ data-expire _ time=time()7000;$ data-jsapi _ ticket=$ ticket;$fp=fopen('jsapi_ticket.json ',' w ');fwrite($fp,JSON _ encode($ data));fc输(FP美元);} } else { $ ticket=$ data-jsapi _ ticket;}返回$机票;}私有函数getAccessToken(){//access _ token应该全局存储与更新,以下代码以写入到文件中做示例$ data=JSON _ decode(file _ get _ contents(' access _ token。JSON’);if ($data-expire_time time()) { //如果是企业号用以下统一资源定位器获取access _ token/$ URL='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$ this-appIdcorpsecret=$ this-appSecret ';$ URL='https://api.weixin.qq.com/cgi-bin/token?grant _ type=client _ credential appid=$ this-appid secret=$ this-appSecret ';$ RES=JSON _ decode($ this-HttpGet($ URL));$ access _ token=$ RES-access _ token;if($ access _ token){ $ data-expire _ time=time()7000;$ data-access _ token=$ access _ token;$fp=fopen('access_token.json ',' w ');fwrite($fp,JSON _ encode($ data));fc输(FP美元);} } else { $ access _ token=$ data-access _ token;}返回$ access _ token}私有函数HttpGet($ URL){ $ curl=curl _ init();curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);curl_setopt($curl,CURLOPT_TIMEOUT,500);//为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开安全套接层安全校验。 //如果在部署过程中代码在此处验证失败,请到http://curl.haxx.se/ca/cacert.pem下载新的证书判别文件。curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,true);curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,true);curl_setopt($curl,CURLOPT_URL,$ URL);$ RES=curl _ exec($ curl);curl _ close($ curl);返回$ res}}更多关于服务器端编程语言(专业超文本预处理器的缩写)相关内容感兴趣的读者可查看本站专题: 《PHP微信开发技巧汇总》 、 《PHP编码与转码操作技巧汇总》 、 《PHP网络编程技巧总结》 、 《PHP基本语法入门教程》 、 《php字符串(string)用法总结》 、 《php+mysql数据库操作入门教程》 及《php常见数据库操作技巧汇总》
希望本文所述对大家服务器端编程语言(专业超文本预处理器的缩写)程序设计有所帮助。