*** 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-sdkjavascript

使用詳解

使用前需先打開微信賬號的開發模式,詳細步驟請查看微信公衆平臺接口使用說明:
微信公衆平臺: http://mp.weixin.qq.com/wiki/ 微信企業平臺: http://qydev.weixin.qq.com/wiki/php

微信支付接入文檔: https://mp.weixin.qq.com/cgi-bin/readtemplate?t=business/course2_tmpl&lang=zh_CNhtml

微信多客服:http://dkf.qq.comjava

目錄

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(已廢棄)
爲開發框架進行適配
調用示例git


1. wechat.class.php 官方API類庫

調用官方API,具備更靈活的消息分類響應方式,支持鏈式調用操做 ;github

主要功能

  • 接入驗證 (初級權限)
  • 自動回覆(文本、圖片、語音、視頻、音樂、圖文) (初級權限)
  • 菜單操做(查詢、建立、刪除) (菜單權限)
  • 客服消息(文本、圖片、語音、視頻、音樂、圖文) (認證權限)
  • 二維碼(建立臨時、永久二維碼,獲取二維碼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_pushscancode_waitmsg 返回數組array ('ScanType'=>'qrcode','ScanResult'=>'123123')
  • getRevSendPicsInfo() 獲取自定義菜單的圖片發送事件信息,事件類型爲pic_sysphotopic_photo_or_albumpic_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的定義ajax

    獲取統計數據方法 參數定義json

    數據分類 $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_dateend_date的差值需小於「最大時間跨度」(好比最大時間跨度爲1時,begin_dateend_date的差值只能爲0,才能小於1)api

  • 卡券接口:
  • 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_pushscancode_waitmsg 返回數組array ('ScanType'=>'qrcode','ScanResult'=>'123123')
  • getRevSendPicsInfo() 獲取自定義菜單的圖片發送事件信息,事件類型爲pic_sysphotopic_photo_or_albumpic_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個重載方法setCachegetCacheremoveCache,以及修改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."\n",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目錄

相關文章
相關標籤/搜索