微信開發之 二維碼生成類庫

最近weiphp 二次開真的有點累,漏洞百出。代碼維護代價有點高。

<?php
/*** Created by PhpStorm.* User: bin* Date: 15-1-16* Time: 上午9:48*/
namespace Home\Common;// 微信處理類
set_time_limit(30);
class Weixin{//構造方法static $qrcode_url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?";static $token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&";static $qrcode_get_url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?";//生成二維碼public function getEwm($wechatid,$fqid,$type = 1){$wechat = M('Member_public')->where(array('id'=> $wechatid))->find();$appid = $wechat['appid'];$secret = $wechat['secret'];$ACCESS_TOKEN = $this->getToken($appid,$secret);$url = $this->getQrcodeurl($ACCESS_TOKEN,$fqid,1);return DownLoadQr($url,time());}protected function getQrcodeurl($ACCESS_TOKEN,$fqid,$type = 1){$url = self::$qrcode_url.'access_token='.$ACCESS_TOKEN;if($type == 1){//生成永久二維碼$qrcode=  '{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": '.$fqid.'}}}';}else{//生成臨時二維碼$qrcode = '{"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": '.$fqid.'}}}';}$result = $this->http_post_data($url,$qrcode);$oo = json_decode($result[1]);if(!$oo->ticket){$this->ErrorLogger('getQrcodeurl falied. Error Info: getQrcodeurl get failed');exit();}$url = self::$qrcode_get_url.'ticket='.$oo->ticket.'';return $url;}protected function getToken($appid,$secret){$ACCESS_TOKEN = file_get_contents(self::$token_url."appid=$appid&secret=$secret");$ACCESS_TOKEN = json_decode($ACCESS_TOKEN);$ACCESS_TOKEN = $ACCESS_TOKEN->access_token;return $ACCESS_TOKEN;}protected function http_post_data($url, $data_string) {$ch = curl_init();curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8','Content-Length: ' . strlen($data_string)));ob_start();curl_exec($ch);if (curl_errno($ch)) {$this->ErrorLogger('curl falied. Error Info: '.curl_error($ch));}$return_content = ob_get_contents();ob_end_clean();$return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);return array($return_code, $return_content);}//下載二維碼到服務器protected function DownLoadQr($url,$filestring){if($url == ""){return false;}$filename = $filestring.'.jpg';ob_start();readfile($url);$img=ob_get_contents();ob_end_clean();$size=strlen($img);$fp2=fopen('./Uploads/qrcode/'.$filename,"a");if(fwrite($fp2,$img) === false){$this->ErrorLogger('dolwload image falied. Error Info: 無法寫入圖片');exit();}fclose($fp2);return './Uploads/qrcode/'.$filename;}private function ErrorLogger($errMsg){$logger = fopen('./ErrorLog.txt', 'a+');fwrite($logger, date('Y-m-d H:i:s')." Error Info : ".$errMsg."\r\n");}}

?

轉載于:https://www.cnblogs.com/bin-pureLife/p/4228076.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257757.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257757.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257757.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

通過Matlab實現離散序列卷積和

前言 年輕人&#xff0c;你對數學一無所知&#xff0c;你只是習慣了而已。—馮諾伊曼 Young man, in mathematics you dont understand things. You just get used to them.—John von Neumann。 一、卷積和是什么&#xff1f; 卷積的本質是描述一個瞬時動作&#xff08;激勵…

Ansible 五(inventory文件 主機清單)

Ansible 五&#xff08;inventory文件 主機清單&#xff09;Ansible 可同時操作屬于一個組的多臺主機,組和主機之間的關系通過 inventory 文件配置. 默認的文件路徑為 /etc/ansible/hosts除默認文件外,你還可以同時使用多個 inventory 文件(后面會講到),也可以從動態源,或云上…

python series用法_如何使用Python中的Series字典創建數據框?

數據框是一種二維數據結構&#xff0c;其中數據以表格格式存儲&#xff0c;以行和列的形式。它可以可視化為SQL數據表或excel工作表表示形式。可以使用以下構造函數創建它-pd.Dataframe(data, index, columns, dtype, copy)讓我們了解如何使用Series字典創建數據框。系列是“熊…

[轉載]android設置全屏和無標題

先介紹去掉標題欄的方法&#xff1a; 第一種&#xff1a;也一般入門的時候經常使用的一種方法 requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉標題欄注意這句一定要寫在setContentView()方法的前面&#xff0c;不然會報錯的 第二種&#xff1a;在AndroidManifest.xml文…

mac電腦下Tomcat和Apach配置流程(超詳細)

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 前言 本章介紹在mac 電腦下如何配置Tomcat、Apach等環境 一、Apache介紹及配置 1.XAMPP安裝 為了更好的進行各項軟件服務的配置&#xff0c;引入快捷腳本工具——XMAPP。…

MVC 分頁

后臺代碼: using Webdiyer.WebControls.Mvc; 1 public ActionResult Index(int id 1)2 {3 int pageIndex id;4 int count;5 int pageSize 7;6 7 List<News> newsList 8 newsSer.QueryByPage…

cvc 降噪_耳機降噪功能這么多,說說什么是ANC、ENC、CVC、DSP降噪

降噪功能對耳機的作用很重要&#xff0c;一是減少噪音&#xff0c;避免過度放大音量&#xff0c;從而減少對耳朵的損害。二是過濾噪音從而提高音質和通話質量。降噪可分為被動式降噪和主動式降噪。被動式降噪也就是物理降噪&#xff0c;被動式降噪是指利用物理特性將外部噪聲與…

RPC 和 RESTful

2019獨角獸企業重金招聘Python工程師標準>>> to do ... 轉載于:https://my.oschina.net/u/2002769/blog/1505410

[linx] ubuntu網絡重啟命令

/etc/init.d/networking restart #這種方式必須有/etc/network/interface文件 ifconfig eth0 down #直接重啟網卡 ifconfig eth0 up 轉載于:https://www.cnblogs.com/fantasy01/p/4229734.html

密碼學入門1——凱撒密碼和三重DES加解密

實驗目的 1、完成第一個入門加解密——凱撒密碼 2、完成當下較為流行的三重DES加解密技術 3、熟悉所學的實際運用方向 實驗準備 硬件&#xff1a;計算機或筆記本電腦 操作系統&#xff1a;Mac操作系統 IDE環境&#xff1a;Eclipse 程序語言&#xff1a;Java 一、實驗基本…

老李談JVM內存模型

老李談JVM內存模型 poptest是國內唯一一家培養測試開發工程師的培訓機構&#xff0c;以學員能勝任自動化測試&#xff0c;性能測試&#xff0c;測試工具開發等工作為目標。如果對課程感興趣&#xff0c;請大家咨詢qq&#xff1a;908821478&#xff0c;咨詢電話010-84505200。 J…

emqx 使用端口_數據傳輸、存儲、展現,EMQ X + TDengine 搭建 MQTT 物聯網數據可視化平臺...

物聯網數據采集涉及到大量設備接入、海量的時序數據傳輸&#xff0c;EMQ X 消息中間件與 TDengine 大數據平臺的組合技術棧完全能夠勝任場景中的海量時間序列監測數據的傳輸、存儲和計算。數據入庫后&#xff0c;往往需要其他方式如數據可視化系統將數據按照規則統計、展現出來…

站點CSS樣式不起作用,或僅僅有一部分起作用?隨手記

事件&#xff1a;網頁中使用了相同的樣式&#xff0c;下半部分正常顯示&#xff0c;上半部分樣式所有丟失不能顯示。解決&#xff1a;改動了相應的CSS樣式文件的編碼 這個是最沒有想到的解決的方法。怎樣調試&#xff1a;通過右鍵頁面查看編碼為UTF-8 或 GBK 看到樣式正常顯示&…

大數據--循序漸進的大數據(2)

一、Hdfs 架構 訪問 (1) ----nameNode(2) |||dataNode每隔一段時間secondaryNameNode會將fsimage和edits進行合并產生心得fsimage&#xff1b;1、Hdfs 適用場景數據密集型并行計算計算密集并行計算2、不適合的場景HDFS不合適大量小文件的儲存HDFS適用于高吞吐量&#xff0c;…

virtualbox 啟動時Kernel driver not installed (rc=-1908) 錯誤的解決方法

virtualbox 啟動時Kernel driver not installed (rc-1908) 錯誤的解決方法 網上的方法各種各樣&#xff0c;結果繞山繞水一點用沒有&#xff0c;就下面這句就行 sudo /Library/Application\ Support/VirtualBox/LaunchDaemons/VirtualBoxStartup.sh restart昨天更新了下系統&a…

ios開發之-繼承的實現運用

// // main.m // 繼承 ////#import <Foundation/Foundation.h> #import "Animal.h" #import "Cat.h" #import "Dog.h" #import "FeedMan.h"int main(int argc, const char * argv[]) {// Animal * animal [Animal new]; /…

查找字段 如何 過濾

dm.ADOTbBug 使用Filter 屬性的話&#xff0c;不能包括 查找字段。 方法1 在過濾事件里 使用查找字段。 http://www.itdelphi.com/delphibbs/doc/2001/558361.htm 方法2 就是使用查找字段對應的KeyFields 為字段名。 比如查找字段是 部門名稱&#xff0c;對應的數據集里KeyFiel…

python字符串去頭尾_帶你認識優秀的python代碼

有一串長的字符串names "LI XIA , ZHAO MING ,LAO WANG *,DA XIONG >,LI MEI MEI, CHANG JIANG,LI QIANG,ZHANG WU JI,ZHANG SAN FENG,DU GU QIU BAI,QIAO FENG"。要求&#xff1a;&#xff08;1&#xff09;過濾所有的名字&#xff0c;去掉每個名字左右的空格和…

python學習筆記之裝飾器、遞歸、算法(第四天)

參考老師的博客&#xff1a; 金角&#xff1a;http://www.cnblogs.com/alex3714/articles/5161349.html 銀角&#xff1a;http://www.cnblogs.com/wupeiqi/articles/4963027.html 一、冒泡算法實例&#xff1a; a [32,5,22,41,7,31,12,102,74,37,9,25] 1、方法1&#xff1a; c…

數字信號處理筆記1-信號與常見操作

年輕人&#xff0c;你對數學一無所知&#xff0c;你只是習慣了而已。 —馮諾伊曼 前言 本學期開始跟著實驗室學習計算機視覺領域&#xff0c;而一個重要的基礎知識就是《數字圖像處理》&#xff0c;而數字信號處理作為一個大類&#xff0c;可以將數字圖像處理理解為數字信號處…