PHP微信公眾號自動發(fā)送紅包API
更新時間:2016年06月01日 14:22:14 作者:ADKi
微信發(fā)紅包已經(jīng)成為當今比較流行的祝福形式,大家都學著使用微信發(fā)紅包,這篇文章主要為大家詳細介紹了PHP微信公眾號自動發(fā)送紅包API,感興趣的小伙伴們可以參考一下
本文實例為大家分享了PHP微信公眾號自動發(fā)送紅包API代碼,分享給大家供大家參考。具體如下:
貼出核心接口代碼至于數(shù)據(jù)自己填寫,接口測試OK
wechat_packet.php
<!--?php /** * 發(fā)送紅包接口 * Created by PhpStorm. * User: ADKi * Date: 2016/4/25 0025 * Time: 15:25 */ class wechat_packet{ private $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack';//請求URL private $mch_id;//商戶號 private $weixin_appid;//公眾賬號appid private $send_name;//商戶名稱 private $total_num = 1;//發(fā)送紅包總人數(shù) private $wishing;//紅包祝福語 private $client_ip;//調(diào)用接口的機器Ip地址 private $act_name;//活動名稱 private $remark;//備注信息 private $nonce_str;//隨機字符串,不長于32位 private $api_password; private $arraytoxml;//數(shù)組轉xml /** * 公鑰 */ private $public_key = "/api/wechat/cert/apiclient_cert.pem"; /** * 私鑰 */ private $private_key = '/api/wechat/cert/apiclient_key.pem'; /** * ca證書 */ private $rootca = 'api/wechat/cert/rootca.pem'; public function __construct() { //初始化紅包設置信息 $this--->weixin_appid = C('wap_weixin_appid'); $this->mch_id = C('wechat_mch_id'); $this->send_name = C('wechat_send_name'); $this->wishing = C('wechat_wishing'); $this->act_name = C('wechat_act_name'); $this->client_ip = $_SERVER['SERVER_ADDR']; $this->remark = C('wechat_remark'); $this->nonce_str = $this->create_nonce_str(32); $this->api_password = C('wechat_api_password'); $inc_file = BASE_PATH.DS.'api'.DS.'wechat'.DS.'arraytoxml.php'; if(is_file($inc_file)) { require($inc_file); } $this->arraytoxml = new ArrayToXML(); } public function send_post($mch_billno,$re_openid,$total_amount){ $sign = $this->create_sign($mch_billno,$re_openid,$total_amount); $send_array = array( 'nonce_str' => $this->nonce_str, 'mch_billno' => $mch_billno, 'mch_id' => $this->mch_id, 'wxappid' => $this->weixin_appid, 'send_name' => $this->send_name, 're_openid' => $re_openid, 'total_amount' => $total_amount, 'total_num' => $this->total_num, 'wishing' => $this->wishing, 'client_ip' => $this->client_ip, 'act_name' => $this->act_name, 'remark' => $this->remark, 'sign' => $sign, ); $send_xml = $this->arraytoxml->toXml($send_array,''); $data = $this->curl_post_ssl($this->url, $send_xml); $data = $this->xmlToArray($data); file_put_contents('adki',var_export($data,true),FILE_APPEND); } /* 請確保您的libcurl版本是否支持雙向認證,版本高于7.20.1 */ private function curl_post_ssl($url, $vars, $second=30,$aHeader=array()){ $ch = curl_init(); //超時時間 curl_setopt($ch,CURLOPT_TIMEOUT,$second); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); //這里設置代理,如果有的話 //curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98'); //curl_setopt($ch,CURLOPT_PROXYPORT, 8080); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); //以下兩種方式需選擇一種 //第一種方法,cert 與 key 分別屬于兩個.pem文件 //默認格式為PEM,可以注釋 curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT,getcwd().$this->public_key); //默認格式為PEM,可以注釋 curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEY,getcwd().$this->private_key); //ca證書 curl_setopt($ch,CURLOPT_CAINFO,$this->rootca); //第二種方式,兩個文件合成一個.pem文件 //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.pem'); if( count($aHeader) >= 1 ){ curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader); } curl_setopt($ch,CURLOPT_POST, 1); curl_setopt($ch,CURLOPT_POSTFIELDS,$vars); $data = curl_exec($ch); if($data){ curl_close($ch); return $data; } else { $error = curl_errno($ch); echo "call faild, errorCode:$error\n\n\n\n"; curl_close($ch); return false; } } //生成簽名 private function create_sign($mch_billno,$re_openid,$total_amount){ $string_array = array( 'act_name' => $this->act_name, 'client_ip' => $this->client_ip, 'mch_billno' => $mch_billno, 'mch_id' => $this->mch_id, 'nonce_str' => $this->nonce_str, 're_openid' => $re_openid, 'remark' => $this->remark, 'send_name' => $this->send_name, 'total_amount' => $total_amount, 'total_num' => $this->total_num, 'wishing' => $this->wishing, 'wxappid' => $this->weixin_appid, ); foreach ($string_array as $key => $value){ if(!empty($value)){ $stringA .= "$key=$value"; if($key != 'wxappid'){ $stringA .= '&'; } } } //轉成UTF-8 $stringA = $this->gbkToUtf8($stringA); $stringSignTemp="$stringA&key=$this->api_password"; $sign = MD5($stringSignTemp); $sign = strtoupper($sign); return $sign; } //生成隨機字符串 private function create_nonce_str($length){ $str = null; $strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"; $max = strlen($strPol)-1; for($i=0;$i<$length;$i++){ $str.=$strPol[rand(0,$max)];//rand($min,$max)生成介于min和max兩個數(shù)之間的一個隨機整數(shù) } return $str; } /** *自動判斷把gbk或gb2312編碼的字符串轉為utf8 *能自動判斷輸入字符串的編碼類,如果本身是utf-8就不用轉換,否則就轉換為utf-8的字符串 *支持的字符編碼類型是:utf-8,gbk,gb2312 *@$str:string 字符串 */ private function gbkToUtf8($str){ $charset = mb_detect_encoding($str,array('ASCII','UTF-8','GBK','GB2312')); $charset = strtolower($charset); if("utf-8" != $charset){ $str = iconv('UTF-8',$charset,$str); } return $str; } private function xmlToArray($postStr){ $msg = array(); $msg = (array)simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); return $msg; } }
數(shù)組轉xml:arraytoxml.php
<!--?php /** * Created by PhpStorm. * User: ADKi * Date: 2016/4/26 0026 * Time: 12:19 */ class ArrayToXML { public function toXml($data){ $xml = '<xml-->'; foreach ($data as $key => $value){ if (is_numeric($value)){ $xml .= "<".$key.">".$value."<!--".$key."-->"; }else{ $xml .= "<".$key."><!--[CDATA[".$value."]]--><!--".$key."-->"; } } $xml .= ''; return $xml; } }
以上就是本文的全部內(nèi)容,希望對大家學習PHP程序設計有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- php微信公眾號開發(fā)模式詳解
- php 微信公眾平臺開發(fā)模式實現(xiàn)多客服的實例代碼
- php實現(xiàn)發(fā)送微信模板消息的方法
- 關于php微信訂閱號開發(fā)之token驗證后自動發(fā)送消息給訂閱號但是沒有消息返回的問題
- PHP實現(xiàn)微信模擬登陸并給用戶發(fā)送消息的方法【文字,圖片,圖文】
- php版微信公眾平臺實現(xiàn)預約提交后發(fā)送email的方法
- 驗證token、回復圖文\文本、推送消息的實用微信類php代碼
- PHP memcache在微信公眾平臺的應用方法示例
- PHP實現(xiàn)微信公眾號企業(yè)號自定義菜單接口示例
- 基于php的微信公眾平臺開發(fā)入門實例
- PHP使用微信開發(fā)模式實現(xiàn)搜索已發(fā)送圖文及匹配關鍵字回復的方法
相關文章
CodeIgniter框架數(shù)據(jù)庫基本操作示例
這篇文章主要介紹了CodeIgniter框架數(shù)據(jù)庫基本操作,結合實例形式分析了CodeIgniter框架針對mysql數(shù)據(jù)庫的配置、用戶注冊、信息查詢、修改及刪除等基本操作技巧,需要的朋友可以參考下2018-05-05PHPStudy hosts文件可能不存在或被阻止打開及同步hosts失敗問題
這篇文章主要介紹了PHPStudy hosts文件可能不存在或被阻止打開,同步hosts失敗,本文分步驟給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05ThinkPHP控制器里javascript代碼不能執(zhí)行的解決方法
這篇文章主要介紹了ThinkPHP控制器里javascript代碼不能執(zhí)行的解決方法,采用ThinkPHP的<literal>標簽來解決javascript標簽被解析的問題,是非常實用的技巧,需要的朋友可以參考下2014-11-11thinkPHP數(shù)據(jù)庫增刪改查操作方法實例詳解
這篇文章主要介紹了thinkPHP數(shù)據(jù)庫增刪改查操作方法,結合實例形式詳細分析了thinkPHP常用數(shù)據(jù)庫操作函數(shù)與相關使用技巧,需要的朋友可以參考下2016-12-12