***wechat-php-sdk微信公眾平臺php開發包
wechat-php-sdk
微信公眾平臺php開發包,細化各項介面操作,支援鏈式呼叫,歡迎Fork此專案
weixin developer SDK. 專案地址:https://github.com/dodgepudding/wechat-php-sdk
專案blog:http://binsee.github.io/wechat-php-sdk
使用詳解
使用前需先開啟微信帳號的開發模式,詳細步驟請檢視微信公眾平臺介面使用說明:
微信公眾平臺: http://mp.weixin.qq.com/wiki/ 微信企業平臺: http://qydev.weixin.qq.com/wiki/
微信支付接入文件: https://mp.weixin.qq.com/cgi-bin/readtemplate?t=business/course2_tmpl&lang=zh_CN
微信多客服:http://dkf.qq.com
目錄
wechat.class.php 官方API類庫
qywechat.class.php 企業號API類庫
errCode.php|qyerrCode.php 全域性返回碼類
old_version/wechatpay.class.php 舊版微信支付V2介面類庫old_version/wechatext.class.php 非官方擴充套件API(停止維護)old_version/wechatauth.class.php 授權登陸(停止維護)old_version/wechat.js 內嵌JS(已廢棄)
為開發框架進行適配
呼叫示例
1. wechat.class.php 官方API類庫
呼叫官方API,具有更靈活的訊息分類響應方式,支援鏈式呼叫操作 ;
主要功能
- 接入驗證 (初級許可權)
- 自動回覆(文字、圖片、語音、視訊、音樂、圖文) (初級許可權)
- 選單操作(查詢、建立、刪除) (選單許可權)
- 客服訊息(文字、圖片、語音、視訊、音樂、圖文) (認證許可權)
- 二維碼(建立臨時、永久二維碼,獲取二維碼URL) (服務號、認證許可權)
- 長連結轉短連結介面 (服務號、認證許可權)
- 分組操作(查詢、建立、修改、移動使用者到分組) (認證許可權)
- 網頁授權(基本授權,使用者資訊授權) (服務號、認證許可權)
- 使用者資訊(查詢使用者基本資訊、獲取關注者列表) (認證許可權)
- 多客服功能(客服管理、獲取客服記錄、客服會話管理) (認證許可權)
- 媒體檔案(上傳、獲取) (認證許可權)
- 高階群發 (認證許可權)
- 模板訊息(設定所屬行業、新增模板、傳送模板訊息) (服務號、認證許可權)
- 卡券管理(建立、修改、刪除、發放、門店管理等) (認證許可權)
- 語義理解 (服務號、認證許可權)
- 獲取微信伺服器IP列表 (初級許可權)
- 微信JSAPI授權(獲取ticket、獲取簽名) (初級許可權)
- 資料統計(使用者、圖文、訊息、介面分析資料) (認證許可權)
> 備註:
> 初級許可權:基本許可權,任何正常的公眾號都有此許可權
> 選單許可權:正常的服務號、認證後的訂閱號擁有此許可權
> 認證許可權:分為訂閱號、服務號認證,如字首服務號則僅認證的服務號有此許可權,否則為認證後的訂閱號、服務號都有此許可權
> 支付許可權:僅認證後的服務號可以申請此許可權
初始化動作
$options = array(
`token`=>`tokenaccesskey`, //填寫你設定的key
`encodingaeskey`=>`encodingaeskey`, //填寫加密用的EncodingAESKey
`appid`=>`wxdk1234567890`, //填寫高階呼叫功能的app id, 請在微信開發模式後臺查詢
`appsecret`=>`xxxxxxxxxxxxxxxxxxx` //填寫高階呼叫功能的金鑰
);
$weObj = new Wechat($options); //建立例項物件
//TODO:呼叫$weObj各例項方法
被動介面方法:
- valid() 驗證連線,被動介面處於加密模式時必須呼叫
- getRev() 獲取微信伺服器發來資訊(不返回結果),被動介面必須呼叫
- getRevData() 返回微信伺服器發來的資訊(陣列)
- getRevFrom() 返回訊息傳送者的userid
- getRevTo() 返回訊息接收者的id(即公眾號id)
- getRevType() 返回接收訊息的型別
- getRevID() 返回訊息id
- getRevCtime() 返回訊息傳送時間
- getRevContent() 返回訊息內容正文或語音識別結果(文字型)
- getRevPic() 返回圖片資訊(圖片型資訊) 返回陣列{`mediaid`=>“,`picurl`=>“}
- getRevLink() 接收訊息連結(連結型資訊) 返回陣列{`url`=>“,`title`=>“,`description`=>“}
- getRevGeo() 返回地理位置(位置型資訊) 返回陣列{`x`=>“,`y`=>“,`scale`=>“,`label`=>“}
- getRevEventGeo() 返回事件地理位置(事件型資訊) 返回陣列{`x`=>“,`y`=>“,`precision`=>“}
- getRevEvent() 返回事件型別(事件型資訊) 返回陣列{`event`=>“,`key`=>“}
- getRevScanInfo() 獲取自定義選單的掃碼推事件資訊,事件型別為
scancode_push
或scancode_waitmsg
返回陣列array (`ScanType`=>`qrcode`,`ScanResult`=>`123123`) - getRevSendPicsInfo() 獲取自定義選單的圖片傳送事件資訊,事件型別為
pic_sysphoto
或pic_photo_or_album
或pic_weixin
陣列結構見php檔案內方法說明 - getRevSendGeoInfo() 獲取自定義選單的地理位置選擇器事件推送,事件型別為
location_select
陣列結構見php檔案內方法說明 - getRevVoice() 返回語音資訊(語音型資訊) 返回陣列{`mediaid`=>“,`format`=>“}
- getRevVideo() 返回視訊資訊(視訊型資訊) 返回陣列{`mediaid`=>“,`thumbmediaid`=>“}
- getRevTicket() 返回接收TICKET(掃描帶引數二維碼,關注或SCAN事件) 返回二維碼的ticket值
- getRevSceneId() 返回二維碼的場景值(掃描帶引數二維碼的關注事件) 返回二維碼的引數值
- getRevTplMsgID() 返回主動推送的訊息ID(群發或模板訊息事件) 返回MsgID值
- getRevStatus() 返回模板訊息傳送狀態(模板訊息事件) 返回文字:success(成功)|failed:user block(使用者拒絕接收)|failed: system failed(傳送失敗(非使用者拒絕))
- getRevResult() 返回群發或模板訊息傳送結果(群發或模板訊息事件) 返回陣列,內容依事件型別而不同,參考開發文件中群發、模板訊息推送事件
- getRevKFCreate() 返回多客服-接入會話的客服賬號(多客服-接入會話事件) 返回文字型
- getRevKFClose() 返回多客服-處理會話的客服賬號(多客服-接入會話事件) 返回文字型
- getRevKFSwitch() 返回多客服-轉接會話資訊(多客服-轉接會話事件) 返回陣列 {`FromKfAccount` => “,`ToKfAccount` => “}
- getRevCardPass() 返回卡券-稽核通過的卡券ID(卡券-卡券稽核事件) 返回文字型
- getRevCardGet() 返回卡券-使用者領取卡券的相關資訊(卡券-領取卡券事件) 返回陣列{`CardId` => “,`IsGiveByFriend` => “,`UserCardCode` => “}
- getRevCardDel() 返回卡券-使用者刪除卡券的相關資訊(卡券-刪除卡券事件) 返回陣列{`CardId` => “,`UserCardCode` => “}
- text($text) 設定文字型訊息,引數:文字內容
- image($mediaid) 設定圖片型訊息,引數:圖片的media_id
- voice($mediaid) 設定語音型訊息,引數:語音的media_id
- video($mediaid=“,$title,$description) 設定視訊型訊息,引數:視訊的media_id、標題、摘要
- music($title,$desc,$musicurl,$hgmusicurl=“,$thumbmediaid=“) 設定回覆音樂,引數:音樂標題、音樂描述、音樂連結、高音質連結、縮圖的媒體id
- news($newsData) 設定圖文型訊息,引數:陣列。陣列結構見php檔案內方法說明
- Message($msg = “,$append = false) 設定傳送的訊息(一般不需要呼叫這個方法)
- transfer_customer_service($customer_account = “) 轉接多客服,如不指定客服可不提供引數,引數:指定客服的賬號
- reply() 將以上已經設定好的訊息,回覆給微信伺服器
預定義常量列表:
////訊息型別,使用例項呼叫getRevType()方法取得
const MSGTYPE_TEXT = `text`;
const MSGTYPE_IMAGE = `image`;
const MSGTYPE_LOCATION = `location`;
const MSGTYPE_LINK = `link`;
const MSGTYPE_EVENT = `event`;
const MSGTYPE_MUSIC = `music`;
const MSGTYPE_NEWS = `news`;
const MSGTYPE_VOICE = `voice`;
const MSGTYPE_VIDEO = `video`;
////事件型別,使用例項呼叫getRevEvent()方法取得
const EVENT_SUBSCRIBE = `subscribe`; //訂閱
const EVENT_UNSUBSCRIBE = `unsubscribe`; //取消訂閱
const EVENT_SCAN = `SCAN`; //掃描帶引數二維碼
const EVENT_LOCATION = `LOCATION`; //上報地理位置
const EVENT_MENU_VIEW = `VIEW`; //選單 - 點選選單跳轉連結
const EVENT_MENU_CLICK = `CLICK`; //選單 - 點選選單拉取訊息
const EVENT_MENU_SCAN_PUSH = `scancode_push`; //選單 - 掃碼推事件(客戶端跳URL)
const EVENT_MENU_SCAN_WAITMSG = `scancode_waitmsg`; //選單 - 掃碼推事件(客戶端不跳URL)
const EVENT_MENU_PIC_SYS = `pic_sysphoto`; //選單 - 彈出系統拍照發圖
const EVENT_MENU_PIC_PHOTO = `pic_photo_or_album`; //選單 - 彈出拍照或者相簿發圖
const EVENT_MENU_PIC_WEIXIN = `pic_weixin`; //選單 - 彈出微信相簿發圖器
const EVENT_MENU_LOCATION = `location_select`; //選單 - 彈出地理位置選擇器
const EVENT_SEND_MASS = `MASSSENDJOBFINISH`; //傳送結果 - 高階群發完成
const EVENT_SEND_TEMPLATE = `TEMPLATESENDJOBFINISH`;//傳送結果 - 模板訊息傳送結果
const EVENT_KF_SEESION_CREATE = `kfcreatesession`; //多客服 - 接入會話
const EVENT_KF_SEESION_CLOSE = `kfclosesession`; //多客服 - 關閉會話
const EVENT_KF_SEESION_SWITCH = `kfswitchsession`; //多客服 - 轉接會話
const EVENT_CARD_PASS = `card_pass_check`; //卡券 - 稽核通過
const EVENT_CARD_NOTPASS = `card_not_pass_check`; //卡券 - 稽核未通過
const EVENT_CARD_USER_GET = `user_get_card`; //卡券 - 使用者領取卡券
const EVENT_CARD_USER_DEL = `user_del_card`; //卡券 - 使用者刪除卡券
主動介面方法:
- checkAuth($appid,$appsecret,$token) 此處傳入公眾後臺高階介面提供的appid和appsecret, 或者手動指定$token為access_token。函式將返回access_token操作令牌
- resetAuth($appid=“) 刪除驗證資料
- resetJsTicket($appid=“) 刪除JSAPI授權TICKET
- getJsTicket($appid=“,$jsapi_ticket=“) 獲取JSAPI授權TICKET
- getJsSign($url, $timestamp=0, $noncestr=“, $appid=“) 獲取JsApi使用簽名資訊陣列,可只提供url地址
- createMenu($data) 建立選單 $data選單結構詳見 自定義選單建立介面
- getServerIp() 獲取微信伺服器IP地址列表 返回陣列array(`127.0.0.1`,`127.0.0.1`)
- getMenu() 獲取選單
- deleteMenu() 刪除選單
- uploadMedia($data, $type) 上傳臨時素材,有效期為3天(注意上傳大檔案時可能需要先呼叫 set_time_limit(0) 避免超時)
- getMedia($media_id,$is_video=false) 獲取臨時素材(含接收到的音訊、視訊媒體檔案)
- uploadForeverMedia($data, $type,$is_video=false,$video_info=array()) 上傳永久素材,可以在公眾平臺官網素材管理模組中看到
- uploadForeverArticles($data) 上傳永久圖文素材
- updateForeverArticles($media_id,$data,$index=0) 修改永久圖文素材(認證後的訂閱號可用)
- getForeverMedia($media_id,$is_video=false) 獲取永久素材
- delForeverMedia($media_id) 刪除永久素材
- getForeverList($type,$offset,$count) 獲取永久素材列表(認證後的訂閱號可用)
- getForeverCount() 獲取永久素材總數
- uploadMpVideo($data) 上傳視訊素材,當需要群發視訊時,必須使用此方法得到的MediaID,否則無法顯示
- uploadArticles($data) 上傳圖文訊息素材
- sendMassMessage($data) 高階群發訊息
- sendGroupMassMessage($data) 高階群發訊息(全體或分組群發)
- deleteMassMessage($msg_id) 刪除群發圖文訊息
- previewMassMessage($data) 預覽群發訊息
- queryMassMessage($msg_id) 查詢群發訊息傳送狀態
- getQRCode($scene_id,$type=0,$expire=1800) 獲取推廣二維碼ticket字串
- getQRUrl($ticket) 獲取二維碼圖片地址
- getShortUrl($long_url) 長連結轉短連結介面
- getUserList($next_openid) 批量獲取關注使用者列表
- getUserInfo($openid) 獲取關注者詳細資訊
- updateUserRemark($openid,$remark) 設定使用者備註名
- getGroup() 獲取使用者分組列表
- getUserGroup($openid) 獲取使用者所在分組
- createGroup($name) 新增自定分組
- updateGroup($groupid,$name) 更改分組名稱
- updateGroupMembers($groupid,$openid) 移動使用者分組
- batchUpdateGroupMembers($groupid,$openid_list) 批量移動使用者分組
- sendCustomMessage($data) 傳送客服訊息
- getOauthRedirect($callback,$state,$scope) 獲取網頁授權oAuth跳轉地址
- getOauthAccessToken() 通過回撥的code獲取網頁授權access_token
- getOauthRefreshToken($refresh_token) 通過refresh_token對access_token續期
- getOauthUserinfo($access_token,$openid) 通過網頁授權的access_token獲取使用者資料
- getOauthAuth($access_token,$openid) 檢驗授權憑證access_token是否有效
- getSignature($arrdata,`sha1`) 生成簽名字串
- generateNonceStr($length=16) 獲取隨機字串
- setTMIndustry($id1,$id2=“) 模板訊息,設定所屬行業
- addTemplateMessage($tpl_id) 模板訊息,新增訊息模板
- sendTemplateMessage($data) 傳送模板訊息
- 多客服介面:
- getCustomServiceMessage($data) 獲取多客服會話記錄
- transfer_customer_service($customer_account) 轉發多客服訊息
- getCustomServiceKFlist() 獲取多客服客服基本資訊
- getCustomServiceOnlineKFlist() 獲取多客服線上客服接待資訊
- createKFSession($openid,$kf_account,$text=“) 建立指定多客服會話
- closeKFSession($openid,$kf_account,$text=“) 關閉指定多客服會話
- getKFSession($openid) 獲取使用者會話狀態
- getKFSessionlist($kf_account) 獲取指定客服的會話列表
- getKFSessionWait() 獲取未接入會話列表
- addKFAccount($account,$nickname,$password) 新增客服賬號
- updateKFAccount($account,$nickname,$password) 修改客服賬號資訊
- deleteKFAccount($account) 刪除客服賬號
- setKFHeadImg($account,$imgfile) 上傳客服頭像
- querySemantic($uid,$query,$category,$latitude=0,$longitude=0,$city=””,$region=””) 語義理解介面 引數含義及返回的json內容請檢視 微信語義理解介面
-
getDatacube($type,$subtype,$begin_date,$end_date=“) 獲取統計資料 引數需注意$type與$subtype的定義
獲取統計資料方法 引數定義
資料分類 $type值(字串) 資料子分類 $subtype值(字串) 時間跨度(天) 使用者分析 `user` 獲取使用者增減資料 `summary` 7 使用者分析 `user` 獲取累計使用者資料 `cumulate` 7 圖文分析 `article` 獲取圖文群發每日資料 `summary` 1 圖文分析 `article` 獲取圖文群發總資料 `total` 1 圖文分析 `article` 獲取圖文統計資料 `read` 3 圖文分析 `article` 獲取圖文統計分時資料 `readhour` 1 圖文分析 `article` 獲取圖文分享轉發資料 `share` 7 圖文分析 `article` 獲取圖文分享轉發分時資料 `sharehour` 1 訊息分析 `upstreammsg` 獲取訊息傳送概況資料 `summary` 7 訊息分析 `upstreammsg` 獲取訊息分送分時資料 `hour` 1 訊息分析 `upstreammsg` 獲取訊息傳送週資料 `week` 30 訊息分析 `upstreammsg` 獲取訊息傳送月資料 `month` 30 訊息分析 `upstreammsg` 獲取訊息傳送分佈資料 `dist` 15 訊息分析 `upstreammsg` 獲取訊息傳送分佈週資料 `distweek` 30 訊息分析 `upstreammsg` 獲取訊息傳送分佈月資料 `distmonth` 30 介面分析 `interface` 獲取介面分析資料 `summary` 30 介面分析 `interface` 獲取介面分析分時資料 `summaryhour` 1 需要注意
begin_date
和end_date
的差值需小於“最大時間跨度”(比如最大時間跨度為1時,begin_date
和end_date
的差值只能為0,才能小於1) - 卡券介面:
- createCard($data) 建立卡券
- updateCard($data) 修改卡券
- delCard($card_id) 刪除卡券
- getCardInfo($card_id) 查詢卡券詳情
- getCardColors() 獲取顏色列表
- getCardLocations() 拉取門店列表
- addCardLocations($data) 批量匯入門店資訊
- createCardQrcode($card_id) 生成卡券二維碼
- consumeCardCode($code) 消耗 code
- decryptCardCode($encrypt_code) code 解碼
- checkCardCode($code) 獲取 code 的有效性
- getCardIdList($data) 批量查詢卡列表
- updateCardCode($code,$card_id,$new_code) 更改 code
- unavailableCardCode($code,$card_id=“) 設定卡券失效(不可逆)
- modifyCardStock($data) 庫存修改
- activateMemberCard($data) 啟用/繫結會員卡,引數結構請參看卡券開發文件(6.1.1 啟用/繫結會員卡)章節
- updateMemberCard($data) 會員卡交易,引數結構請參看卡券開發文件(6.1.2 會員卡交易)章節
- updateLuckyMoney($code,$balance,$card_id=“) 更新紅包金額
- setCardTestWhiteList($openid=array(),$user=array()) 設定卡券測試白名單
- 搖一搖周邊介面:
- applyShakeAroundDevice($data) 申請裝置ID
- updateShakeAroundDevice($data) 編輯裝置的備註資訊
- searchShakeAroundDevice($data) 查詢裝置列表
- bindLocationShakeAroundDevice($device_id,$poi_id,$uuid=“,$major=0,$minor=0) 配置裝置與門店的關聯關係
- bindPageShakeAroundDevice($device_id,$page_ids=array(),$bind=1,$append=1,$uuid=“,$major=0,$minor=0) 配置裝置與頁面的關聯關係
- uploadShakeAroundMedia($data) 上傳在搖一搖頁面展示的圖片素材
- addShakeAroundPage($title,$description,$icon_url,$page_url,$comment=“) 新增搖一搖出來的頁面資訊
- updateShakeAroundPage($page_id,$title,$description,$icon_url,$page_url,$comment=“) 編輯搖一搖出來的頁面資訊
- searchShakeAroundPage($page_ids=array(),$begin=0,$count=1) 查詢搖一搖已有的頁面
- deleteShakeAroundPage($page_ids=array()) 刪除搖一搖已有的頁面,必須是未與裝置關聯的頁面
- getShakeInfoShakeAroundUser($ticket) 獲取搖周邊的裝置及使用者資訊
- deviceShakeAroundStatistics($device_id,$begin_date,$end_date,$uuid=“,$major=0,$minor=0) 以裝置為維度的資料統計介面
- pageShakeAroundStatistics($page_id,$begin_date,$end_date) 以頁面為維度的資料統計介面
2. wechatext.class.php 非官方擴充套件API
此擴充套件類庫已經不再更新,原因是官方對公眾號開放了眾多介面,此類庫繼續維護的意義不大
非官方擴充套件API,需要配置公眾平臺賬戶和密碼,能實現對已關注使用者的點對點微信,此方式不保證長期有效。
類方法裡提及的使用者id在介面返回結構裡表述為FakeId, 屬同一概念, 在下面wechatauth類裡則表示為Uin, 使用者id對應的微訊號必須通過getInfo()方法通過返回陣列的Username值獲取, 但非關注關係使用者資料不能獲取.
呼叫下列方法前必須經過login()方法和checkValid()驗證方法才能獲得呼叫許可權. 有的賬戶無法通過登陸可能因為要求提供驗證碼, 可以手動登陸後把獲取到的cookie寫程式序存放cookie的檔案解決.
程式使用了經過修改的snoopy相容式HTTP類方法, 在類似BAE/SAE雲伺服器上可能不能正常執行, 因為雲服務的curl方法是經過重寫的, 某些header引數如網站來源引數不被支援.
類主要方法:
- send($id,$content) 向某使用者id傳送微信文字資訊
- sendNews($id,$msgid) 傳送圖文訊息, 可通過getNewsList獲取$msgid
- getUserList($page,$pagesize,$groupid) 獲取使用者資訊
- getGroupList($page,$pagesize) 獲取群組資訊
- getNewsList($page,$pagesize) 獲取圖文資訊列表
- uploadFile($filepath,$type) 上傳附件,包括圖片/音訊/視訊/縮圖
- getFileList($type,$page,$pagesize) 獲取素材庫檔案列表
- sendImage($id,$fid) 傳送圖片訊息
- sendAudio($id,$fid) 傳送音訊訊息
- sendVideo($id,$fid) 傳送視訊訊息
- getInfo($id) 根據id獲取使用者資料,注: 非關注關係使用者資料不能獲取
- getNewMsgNum($lastid) 獲取從$lastid算起新訊息的數目
- getTopMsg() 獲取最新一條訊息的資料, 此方法獲取的訊息id可以作為檢測新訊息的$lastid依據
- getMsg($lastid,$offset=0,$perpage=50,$day=0,$today=0,$star=0) 獲取最新的訊息列表, 列表將返回訊息id, 使用者id, 訊息型別, 文字訊息等引數
- 訊息返回結構: {“id”:”訊息id”,”type”:”型別號(1為文字,2為圖片,3為語音)”,”fileId”:”0″,”hasReply”:”0″,”fakeId”:”使用者uid”,”nickName”:”暱稱”,”dateTime”:”時間戳”,”content”:”文字內容”}
- getMsgImage($msgid,$mode=`large`) 若訊息type型別為2, 呼叫此方法獲取圖片資料
- getMsgVoice($msgid) 若訊息type型別為3, 呼叫此方法獲取語音資料
3. wechatauth.class.php 授權登陸
此擴充套件類庫已經不再更新,原因是官方開放平臺對網站應用開放的有授權登陸介面,更標準,更好用。請檢視:微信開放平臺
通過微信二維碼登陸微信的API, 能實現第三方網站同步登陸, 首先程式分別通過get_login_code和get_code_image方法獲取授權二維碼圖片, 然後利用微信手機客戶端掃描二維碼圖片後將自動跳出授權頁面, 使用者點選授權後即可獲取對應的使用者資料和頭像資訊. 詳細驗證步驟請看test3.php例子.
類主要方法:
- get_login_code() 獲取登陸授權碼, 通過授權碼才能獲取二維碼
- get_code_image($code=“) 將上面獲取的授權碼轉換為圖片二維碼
- verify_code() 鑑定是否登陸成功,返回200為最終授權成功.
- get_login_info() 鑑定成功後呼叫此方法即可獲取使用者基本資訊
- get_avatar($url) 獲取使用者頭像圖片資料
- logout() 登出登陸
4. wechat.js 內嵌JS
此JS指令碼已經廢棄不再更新,原因是官方在微信6.0.2版本開放了全新的JSAPI介面,更全面好用。請檢視:微信公眾平臺WIKI
微信內嵌網頁特殊功能js呼叫:
- WeixinJS.hideOptionMenu() 隱藏右上角按鈕
- WeixinJS.showOptionMenu() 顯示右上角按鈕
- WeixinJS.hideToolbar() 隱藏工具欄
- WeixinJS.showToolbar() 顯示工具欄
- WeixinJS.getNetworkType() 獲取網路狀態
- WeixinJS.closeWindow() 關閉視窗
- WeixinJS.scanQRCode() 掃描二維碼
- WeixinJS.openUrlByExtBrowser(url) 使用瀏覽器開啟網址
- WeixinJS.jumpToBizProfile(username) 跳轉到指定公眾賬號頁面
- WeixinJS.sendEmail(title,content) 傳送郵件
- WeixinJS.openProductView(latitude,longitude,name,address,scale,infoUrl) 檢視地圖
- WeixinJS.addContact(username) 新增微信賬號
- WeixinJS.imagePreview(urls,current) 調出微信內圖片預覽
- WeixinJS.payCallback(appId,package,timeStamp,nonceStr,signType,paySign,callback) 微信JsApi支付介面
- WeixinJS.editAddress(appId,addrSign,timeStamp,nonceStr,callback) 微信JsApi支付介面
- 通過定義全域性變數dataForWeixin配置觸發分享的內容:
javascript var dataForWeixin={ appId:"", MsgImg:"訊息圖片路徑", TLImg:"時間線圖路徑", url:"分享url路徑", title:"標題", desc:"描述", fakeid:"", callback:function(){} };
5. errCode.php 全域性返回碼類
當呼叫API介面失敗時,可以用此類來獲取失敗原因的中文說明。
注意:微信公眾號引用errCode.php
,企業號引用qyerrCode.php
。
使用方法:
include "errCode.php"; //或 qyerrCode.php
$ret=ErrCode::getErrText(48001); //錯誤碼可以通過公眾號類庫的公開變數errCode得到
if ($ret)
echo $ret;
else
echo "未找到對應的內容";
6. qywechat.class.php 企業號API類庫
呼叫官方API,具有更靈活的訊息分類響應方式,支援鏈式呼叫操作 ;
主要功能
- 接入驗證
- 自動回覆(文字、圖片、語音、視訊、音樂、圖文)
- 選單操作(查詢、建立、刪除)
- 部門管理(建立、更新、刪除、獲取部門列表)
- 成員管理(建立、更新、刪除、獲取成員資訊,獲取部門成員列表)
- 標籤管理(建立、更新、刪除、獲取成員、新增成員、刪除成員,獲取標籤列表)
- 媒體檔案管理(上傳、獲取)
- 二次驗證
- OAuth2(生成授權url、獲取成員資訊)
- 獲取企業微信伺服器IP列表
- 微信JSAPI授權(獲取ticket、獲取簽名)
初始化動作
$options = array(
`token`=>`tokenaccesskey`, //填寫應用介面的Token
`encodingaeskey`=>`encodingaeskey`, //填寫加密用的EncodingAESKey
`appid`=>`wxdk1234567890`, //填寫高階呼叫功能的app id
`appsecret`=>`xxxxxxxxxxxxxxxxxxx`, //填寫高階呼叫功能的金鑰
`agentid`=>`1`, //應用的id
`debug`=>false, //除錯開關
`_logcallback`=>`logg`, //除錯輸出方法,需要有一個string型別的引數
);
$weObj = new Wechat($options); //建立例項物件
//TODO:呼叫$weObj各例項方法
被動介面方法:
- valid() 驗證連線,被動介面必須呼叫
- getRev() 獲取微信伺服器發來資訊(不返回結果),被動介面必須呼叫
- getRevData() 返回微信伺服器發來的資訊(陣列)
- getRevPostXml() 返回微信伺服器發來的原始加密xml資訊
- getRevFrom() 返回訊息傳送者的userid
- getRevTo() 返回訊息接收者的id(即公眾號id,一般與等同appid一致)
- getRevAgentID() 返回接收訊息的應用id
- getRevType() 返回接收訊息的型別
- getRevID() 返回訊息id
- getRevCtime() 返回訊息傳送事件
- getRevContent() 返回訊息內容正文(文字型訊息)
- getRevPic() 返回圖片資訊(圖片型資訊) 返回陣列{`mediaid`=>“,`picurl`=>“}
- getRevGeo() 返回地理位置(位置型資訊) 返回陣列{`x`=>“,`y`=>“,`scale`=>“,`label`=>“}
- getRevEventGeo() 返回事件地理位置(事件型資訊) 返回陣列{`x`=>“,`y`=>“,`precision`=>“}
- getRevEvent() 返回事件型別(事件型資訊) 返回陣列{`event`=>“,`key`=>“}
- getRevScanInfo() 獲取自定義選單的掃碼推事件資訊,事件型別為
scancode_push
或scancode_waitmsg
返回陣列array (`ScanType`=>`qrcode`,`ScanResult`=>`123123`) - getRevSendPicsInfo() 獲取自定義選單的圖片傳送事件資訊,事件型別為
pic_sysphoto
或pic_photo_or_album
或pic_weixin
陣列結構見php檔案內方法說明 - getRevSendGeoInfo() 獲取自定義選單的地理位置選擇器事件推送,事件型別為
location_select
陣列結構見php檔案內方法說明 - getRevVoice() 返回語音資訊(語音型資訊) 返回陣列{`mediaid`=>“,`format`=>“}
- getRevVideo() 返回視訊資訊(視訊型資訊) 返回陣列{`mediaid`=>“,`thumbmediaid`=>“}
- text($text) 設定文字型訊息,引數:文字內容
- image($mediaid) 設定圖片型訊息,引數:圖片的media_id
- voice($mediaid) 設定語音型訊息,引數:語音的media_id
- video($mediaid=“,$title,$description) 設定視訊型訊息,引數:視訊的media_id、標題、摘要
- news($newsData) 設定圖文型訊息,引數:陣列。陣列結構見php檔案內方法說明
- image($mediaid) 設定圖片型訊息,引數:圖片的media_id
- Message($msg = “,$append = false) 設定傳送的訊息(一般不需要呼叫這個方法)
- reply() 將已經設定好的訊息,回覆給微信伺服器
預定義常量列表:
////訊息型別,使用例項呼叫getRevType()方法取得
const MSGTYPE_TEXT = `text`;
const MSGTYPE_IMAGE = `image`;
const MSGTYPE_LOCATION = `location`;
const MSGTYPE_LINK = `link`; //暫不支援
const MSGTYPE_EVENT = `event`;
const MSGTYPE_MUSIC = `music`; //暫不支援
const MSGTYPE_NEWS = `news`;
const MSGTYPE_VOICE = `voice`;
const MSGTYPE_VIDEO = `video`;
////事件型別,使用例項呼叫getRevEvent()方法取得
const EVENT_SUBSCRIBE = `subscribe`; //訂閱
const EVENT_UNSUBSCRIBE = `unsubscribe`; //取消訂閱
const EVENT_LOCATION = `LOCATION`; //上報地理位置
const EVENT_ENTER_AGENT = `enter_agent`; //使用者進入應用
const EVENT_MENU_VIEW = `VIEW`; //選單 - 點選選單跳轉連結
const EVENT_MENU_CLICK = `CLICK`; //選單 - 點選選單拉取訊息
const EVENT_MENU_SCAN_PUSH = `scancode_push`; //選單 - 掃碼推事件(客戶端跳URL)
const EVENT_MENU_SCAN_WAITMSG = `scancode_waitmsg`; //選單 - 掃碼推事件(客戶端不跳URL)
const EVENT_MENU_PIC_SYS = `pic_sysphoto`; //選單 - 彈出系統拍照發圖
const EVENT_MENU_PIC_PHOTO = `pic_photo_or_album`; //選單 - 彈出拍照或者相簿發圖
const EVENT_MENU_PIC_WEIXIN = `pic_weixin`; //選單 - 彈出微信相簿發圖器
const EVENT_MENU_LOCATION = `location_select`; //選單 - 彈出地理位置選擇器
const EVENT_SEND_MASS = `MASSSENDJOBFINISH`; //傳送結果 - 高階群發完成
const EVENT_SEND_TEMPLATE = `TEMPLATESENDJOBFINISH`;//傳送結果 - 模板訊息傳送結果
主動介面方法:
- checkAuth($appid=“,$appsecret=“,$token=“) 通用auth驗證方法,也用來換取ACCESS_TOKEN 。僅在需要手動指定access_token時才用
$token
- resetAuth($appid=“) 清除記錄的ACCESS_TOKEN
- resetJsTicket($appid=“) 刪除JSAPI授權TICKET
- getJsTicket($appid=“,$jsapi_ticket=“) 獲取JSAPI授權TICKET
- getJsSign($url, $timestamp=0, $noncestr=“, $appid=“) 獲取JsApi使用簽名資訊陣列,可只提供url地址
- getSignature($arrdata,`sha1`) 生成簽名字串
- generateNonceStr($length=16) 獲取隨機字串
- createMenu($data,$agentid=“) 建立選單,引數:選單內容陣列,要建立選單應用id
- getMenu($agentid=“) 獲取選單內容,引數:要獲取選單內容的應用id
- deleteMenu($agentid=“) 刪除選單,引數:要刪除選單的應用id
- uploadMedia($data, $type) 上傳媒體檔案,引數請看php檔案內方法說明(注意上傳大檔案時可能需要先呼叫 set_time_limit(0) 避免超時)
- getMedia($media_id) 根據媒體檔案ID獲取媒體檔案,引數:媒體id
- getServerIp() 獲取企業微信伺服器IP地址列表 返回陣列array(`127.0.0.1`,`127.0.0.1`)
- createDepartment($data) 建立部門,引數: array(“name”=>”郵箱產品組”,”parentid”=>”1″,”order” => “1”)
- updateDepartment($data) 更新部門,引數: array(“id”=>”1″,”name”=>”郵箱產品組”,”parentid”=>”1″,”order” => “1”)
- deleteDepartment($id) 刪除部門,引數:要刪除的部門id
- moveDepartment($data) 移動部門,引數:array(“department_id” => “5”,”to_parentid” => “2”,”to_position” => “1”)
- getDepartment() 獲取部門列表,返回部門陣列。其中department部門列表資料。以部門的order欄位從小到大排列
- createUser($data) 建立成員,引數請看php檔案內方法說明
- updateUser($data) 更新成員,引數請看php檔案內方法說明
- deleteUser($userid) 刪除成員,引數:員工UserID
- deleteUsers($userids) 批量刪除成員,引數:員工UserID陣列
- getUserInfo($userid) 獲取成員資訊,引數:員工UserID
- getUserList($department_id,$fetch_child=0,$status=0) 獲取部門成員,引數:部門id,是否遞迴獲取子部門,獲取型別。 > 0獲取全部員工,1獲取已關注成員列表,2獲取禁用成員列表,4獲取未關注成員列表。status可疊加
- getUserListInfo($department_id,$fetch_child=0,$status=0) 獲取部門成員詳情,引數同上
- getUserId($code,$agentid) 根據code獲取員工UserID與手機裝置號,引數:Oauth2.0或者二次驗證返回的code值,跳轉連結時所在的企業應用ID
- sendInvite($userid,$invite_tips=“) 邀請成員關注
- createTag($data) 建立標籤,引數:array(“tagname” => “UI”)
- updateTag($data) 更新標籤,引數:array(“tagid” => “1”,”tagname” => “UI”)
- deleteTag($tagid) 刪除標籤,引數:標籤TagID
- getTag($tagid) 獲取標籤成員,引數:標籤TagID
- addTagUser($data) 增加標籤成員,引數請看php檔案內方法說明
- delTagUser($data) 刪除標籤成員,引數請看php檔案內方法說明
- getTagList() 獲取標籤列表,返回標籤陣列
- sendMessage($data) 主動傳送資訊介面,引數請看php檔案內方法說明
- authSucc($userid) 二次驗證,引數: 員工UserID
- getOauthRedirect($callback,$state=`STATE`,$scope=`snsapi_base`) 組合授權跳轉介面url
7. wechatpay.class.php 舊版微信支付V2介面類庫
舊版微信支付類庫(微信支付V2),已移動至old_version目錄下。
自2014年8月開始申請到的微信支付都是V3介面,據官方說V2的會陸續升級為V3介面,但時間及升級渠道未確認。
主要功能
- 獲取access_token (初級許可權)
- 呼叫地址元件 (支付許可權)
- 生成訂單簽名資料 (支付許可權)
- 訂單成功回撥 (支付許可權)
- 發貨通知 (支付許可權)
- 支付訂單查詢 (支付許可權)
> 備註:
> 初級許可權:基本許可權,任何正常的公眾號都有此許可權
> 選單許可權:正常的服務號、認證後的訂閱號擁有此許可權
> 認證許可權:分為訂閱號、服務號認證,如字首服務號則僅認證的服務號有此許可權,否則為認證後的訂閱號、服務號都有此許可權
> 支付許可權:僅認證後的服務號可以申請此許可權
初始化動作
$options = array(
`appid`=>`wxdk1234567890`, //填寫高階呼叫功能的app id, 請在微信開發模式後臺查詢
`appsecret`=>`xxxxxxxxxxxxxxxxxxx`, //填寫高階呼叫功能的金鑰
`partnerid`=>`88888888`, //財付通商戶身份標識,支付許可權專用,沒有可不填
`partnerkey`=>``, //財付通商戶許可權金鑰Key,支付許可權專用
`paysignkey`=>`` //商戶簽名金鑰Key,支付許可權專用
);
$weObj = new Wechat($options); //建立例項物件
//TODO:呼叫$weObj各例項方法
主動介面方法:
- checkAuth($appid=“,$appsecret=“,$token=“) 獲取access_token。可根據appid和appsecret獲取,或手動指定access_token
- resetAuth($appid=“) 刪除驗證資料
- getSignature($arrdata,`sha1`) 生成簽名字串
- generateNonceStr($length=16) 獲取隨機字串
- createNativeUrl($productid) 生成原生支付url
- createPackage($out_trade_no,$body,$total_fee,$notify_url,$spbill_create_ip,$fee_type=1,$bank_type=”WX”,$input_charset=”UTF-8″,$time_start=””,$time_expire=””,$transport_fee=””,$product_fee=””,$goods_tag=””,$attach=””) 生成訂單package字串
- getPaySign($package, $timeStamp, $nonceStr) 支付簽名(paySign)生成方法
- checkOrderSignature($orderxml=“) 回撥通知簽名驗證
- sendPayDeliverNotify($openid,$transid,$out_trade_no,$status=1,$msg=`ok`) 發貨通知
- getPayOrder($out_trade_no) 查詢訂單資訊
- setUserToken($user_token) 設定使用者授權金鑰
- getAddrSign($url, $timeStamp, $nonceStr, $user_token=“) 獲取收貨地址JS的簽名
為開發框架進行適配
為不同的開發框架進行適配快取操作(儲存access_token、jsapi_ticket),及輸出除錯日誌。
由於微信api需要快取access_token與jsapi_ticket,而在不同框架下的快取方式不同,所以原先在Wechat.class.php和QYWechat.class.php中快取程式碼做了TODO標誌。 需要各位在使用不同框架時再進行修改,但確實很麻煩,因為對結構進行了修改。
取消了原先同步維護的Thinkphp版本,為Wechat類增加操作快取3個過載方法
setCache
,getCache
,removeCache
,以及修改log
方法可以過載。 分別來實現在不同開發框架下的設定快取、讀取快取、清除快取、日誌輸出4個功能。
在不同的開發框架下使用Wechat類庫,請繼承Wechat類,根據需要實現這4個方法。
可參考Thinkphp版的TPWechat.class.php
為不同框架進行適配。 歡迎提交其他框架的適配檔案到專案庫來。
為Thinkphp進行適配的示例如下:
/**
* 微信公眾平臺PHP-SDK, ThinkPHP例項
* @author dodgepudding@gmail.com
* @link https://github.com/dodgepudding/wechat-php-sdk
* @version 1.2
* usage:
* $options = array(
* `token`=>`tokenaccesskey`, //填寫你設定的key
* `encodingaeskey`=>`encodingaeskey`, //填寫加密用的EncodingAESKey
* `appid`=>`wxdk1234567890`, //填寫高階呼叫功能的app id
* `appsecret`=>`xxxxxxxxxxxxxxxxxxx` //填寫高階呼叫功能的金鑰
* );
* $weObj = new TPWechat($options);
* $weObj->valid();
* ...
*
*/
class TPWechat extends Wechat
{
/**
* log overwrite
* @see Wechat::log()
*/
protected function log($log){
if ($this->debug) {
if (function_exists($this->logcallback)) {
if (is_array($log)) $log = print_r($log,true);
return call_user_func($this->logcallback,$log);
}elseif (class_exists(`Log`)) {
Log::write(`wechat:`.$log, Log::DEBUG);
}
}
return false;
}
/**
* 過載設定快取
* @param string $cachename
* @param mixed $value
* @param int $expired
* @return boolean
*/
protected function setCache($cachename,$value,$expired){
return S($cachename,$value,$expired);
}
/**
* 過載獲取快取
* @param string $cachename
* @return mixed
*/
protected function getCache($cachename){
return S($cachename);
}
/**
* 過載清除快取
* @param string $cachename
* @return boolean
*/
protected function removeCache($cachename){
return S($cachename,null);
}
}
呼叫示例
官方Wechat呼叫示例:
//test1.php
include "wechat.class.php";
$options = array(
`token`=>`tokenaccesskey`, //填寫你設定的key
`encodingaeskey`=>`encodingaeskey` //填寫加密用的EncodingAESKey,如介面為明文模式可忽略
);
$weObj = new Wechat($options);
$weObj->valid();//明文或相容模式可以在介面驗證通過後註釋此句,但加密模式一定不能註釋,否則會驗證失敗
$type = $weObj->getRev()->getRevType();
switch($type) {
case Wechat::MSGTYPE_TEXT:
$weObj->text("hello, I`m wechat")->reply();
exit;
break;
case Wechat::MSGTYPE_EVENT:
break;
case Wechat::MSGTYPE_IMAGE:
break;
default:
$weObj->text("help info")->reply();
}
企業號API類庫呼叫示例:
可參考test目錄下的qydemo.php
include "wechat.class.php";
$options = array(
`token`=>`9Ixxxxxxx`, //填寫應用介面的Token
`encodingaeskey`=>`d4o9WVg8sxxxxxxxxxxxxxxxxxxxxxx`,//填寫加密用的EncodingAESKey
`appid`=>`wxa07979baxxxxxxxx`, //填寫高階呼叫功能的appid
);
$weObj = new Wechat($options);
$weObj->valid(); //注意, 企業號與普通公眾號不同,必須開啟驗證,不要註釋掉
$type = $weObj->getRev()->getRevType();
switch($type) {
case Wechat::MSGTYPE_TEXT:
$weObj->text("hello, I`m wechat")->reply();
exit;
break;
case Wechat::MSGTYPE_EVENT:
break;
case Wechat::MSGTYPE_IMAGE:
break;
default:
$weObj->text("help info")->reply();
}
擴充套件包Wechatext呼叫示例:
// old_version/test/test2.php
include "wechatext.class.php";
function logdebug($text){
file_put_contents(`./data/log.txt`,$text."
",FILE_APPEND);
};
$options = array(
`account`=>`demo@domain.com`,
`password`=>`demo`,
`datapath`=>`./data/cookie_`,
`debug`=>true,
`logcallback`=>`logdebug`
);
$wechat = new Wechatext($options);
if ($wechat->checkValid()) {
// 獲取使用者資訊
$data = $wechat->getInfo(`3974255`);
var_dump($data);
// 獲取最新一條訊息
$topmsg = $wechat->getTopMsg();
var_dump($topmsg);
// 主動回覆訊息
if ($topmsg && $topmsg[`has_reply`]==0)
$wechat->send($topmsg[`fakeid`],`hi `.$topmsg[`nick_name`].`,rev:`.$topmsg[`content`]);
}
微信二維碼Wechatauth登陸示例:
// old_version/test/test3.php
include "../wechatauth.class.php";
session_start();
$sid = session_id();
$options = array(
`account`=>$sid,
`datapath`=>`../data/cookiecode_`,
);
$wechat = new Wechatauth($options);
if (isset($_POST[`code`])) {
$logincode = $_POST[`code`];
$vres = $wechat->set_login_code($logincode)->verify_code();
if ($vres===false) {
$result = array(`status`=>0);
} else {
$result = array(`status`=>$vres);
if ($vres==200) {
$result[`info`] = $wechat->get_login_info();
$result[`cookie`] = $wechat->get_login_cookie(true);
}
}
die(json_encode($result));
}
$logincode = $wechat->get_login_code(); //獲取授權碼
$qrimg = $wechat->get_code_image(); //待輸出的二維碼圖片
HTML部分請看old_version/test/test3.php, 主要是定時ajax查詢是否已經授權成功
新版微信JSAPI呼叫DEMO:
請看test/jsapi目錄
如何聯絡我:【萬里虎】www.bravetiger.cn
【QQ】3396726884 (諮詢問題100元起,幫助解決問題500元起)
【部落格】http://www.cnblogs.com/kenshinobiy/
相關文章
- PHP微信公眾平臺開發視訊PHP
- 基於 PHP 的微信公眾平臺開發PHP
- 2.PHP微信公眾平臺開發(二) 公眾平臺示例程式碼分PHP
- 6.PHP微信公眾平臺開發 - 翻譯功能開發PHP
- 1.PHP微信公眾平臺開發(一) 配置介面PHP
- 微信公眾平臺開發入門
- Senparc.Weixin.MP SDK 微信公眾平臺開發教程(三):微信公眾平臺開發驗證
- 7.PHP微信公眾平臺開發 聊天機器人開發PHP機器人
- 4.PHP微信公眾平臺開發 - 簡單回覆功能開發PHP
- 微信公眾平臺JSSDK分享介面開發(PHP實現)JSPHP
- 微信公眾平臺開發(十一) 功能整合
- 微信公眾平臺完整開發教程 by ZTalk
- 5.PHP微信公眾平臺開發 - 天氣預報功能開發PHP
- 8.PHP微信公眾平臺開發 自定義選單功能PHP
- 3.PHP微信公眾平臺開發 訂閱事件處理PHP事件
- 微信公眾平臺開發(六) 翻譯功能開發
- 微信公眾平臺開發之店鋪類
- 微信公眾平臺開發(四) 簡單回覆功能開發
- 微信公眾平臺搭建與開發揭祕.pdf
- 微信公眾平臺開發(77) 圖片下載
- 微信公眾平臺開發(九) 資料庫操作資料庫
- 最新微信公眾平臺js sdk整合PHP版JSPHP
- 微信公眾平臺開發(五) 天氣預報功能開發
- 微信公眾平臺開發(七) 聊天機器人功能開發機器人
- 微信公眾平臺開發(八) 自定義選單功能開發
- PHP微信公眾號開發——公共方法PHP
- 微信公眾平臺開發(81) 2014新年微信賀卡
- C#微信公眾平臺開發—高階群發介面C#
- 微信公眾平臺介面APIAPI
- 微信公眾平臺SDK for node
- 微信公眾號定時群發平臺
- 9.微信公眾平臺開發 - 資料庫操作資料庫
- java開發微信公眾平臺(一)-- 伺服器配置Java伺服器
- 微信公眾平臺開發介面PHPSDK完整版PHP
- 微信公眾平臺開發(十二) 傳送客服訊息
- 微信公眾平臺開發(十) 訊息回覆總結
- 微信公眾平臺開發JS-SDK開發(影像介面例項)JS
- 微信公眾平臺/擴充套件套件