首頁 > php教程 > php手册 > 2016封裝的微信支付,太好用了

2016封裝的微信支付,太好用了

WBOY
發布: 2016-08-04 08:56:20
原創
1535 人瀏覽過

一直在做微信,遇到過很多坑,今天寫出來,讓大家少走點彎路,第一次寫文字,有點土,如果有不懂的童鞋,可以聯絡我QQ1034100429,或者發私訊。
getaccesstoken 取得access_token
//啟動付款
public function sendpay($openid, $title, $out_trade_no, $total_fee, $notify_url)

sendtpl 發送範本訊息<?php <br /> /**<br>  * 由 PhpStorm 建立。 <br>  * 使用者:管理員<br>  * 日期:2016/4/11<br>  *時間:22:43<br>  */<br> namespace Org;<br> class Weixin<br> {<br>     private $appid;  //微信公號的appid<br>     private $appsecret; //微信公眾號碼的appsecret<br>     private $mchid;  //微信公眾號的商家號碼<br>     private $wechatkey; //微信公號的付款金鑰<br>     private $token;<br>     public function __construct()<br>     {<br>         $this->appid = C('WEIXIN_APPID');<br>         $this->appsecret = C("WEIXIN_APP_SECRET");<br>         $this->mchid = C("WEIXIN_MCHID");<br>         $this->wechatkey = C("WEIXIN_KEY");<br>         $this->token = C('WEIXIN_APP_TOKEN');<br> <br>     }<br>     public function chushi()<br>     {<br>         echo  $this->getaccesstoken();<br>     }<br>     public function checkSignature()<br>     {<br>         $signature = $_GET['signature'];<br>         $timestamp = $_GET['timestamp'];<br>         $nonce = $_GET['nonce'];<br>         $token = $this->token;<br>         $arrtemp = array($token, $timestamp, $nonce);<br>         sort($arrtemp, SORT_STRING);<br>         $arrtemp = implode($arrtemp);<br>         $arrtemp = sha1($arrtemp);<br>         if ($arrtemp == $signature) {<br>             return true;<br>         } else {<br>             return false;<br>         }<br>     }<br>     public function valid()<br>     {<br>         $echoStr = $_GET['echostr'];<br>         if ($this->checkSignature()) {<br>             echo $echoStr;<br>             exit;<br>         }<br>     }<br> ////根據回傳的資訊,做出對應的處理<br> //    public function responseMsg()<br> //    {<br> //        $postStr = file_get_contents('php://input');<br> //        if (!empty($postStr)){<br> //            /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,<br> //               the best way is to check the validity of xml by yourself */<br> //            libxml_disable_entity_loader(true);<br> //            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);<br>//            $fromUsername = $postObj->FromUserName;<br> //            $toUsername = $postObj->ToUserName;<br> //            $keyword = trim($postObj->Content);<br> //            $msgType = $postObj->MsgType;<br> //            $Event=$postObj->Event;<br> //            $time = time();<br> //            $textTpl = "<xml><br> //                            <tousername></tousername><br> //                            <fromusername></fromusername><br> //                            <createtime>%s</createtime><br> //                            <msgtype></msgtype><br> //                            內容><br> //                           <funcflag>0</funcflag><br> //                            </xml>」且;<br> //            if(!empty( $keyword ))<br> //            {<br> //                $msgType = "text";<br> //                $contentStr =「歡迎來到微信世界!」;<br> //                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);<br> //                echo $resultStr;<br> //            }其他{<br> //                echo 「輸入上一些內容...」;<br> //            }<br> //<br> //        }否則{<br> //            echo "";<br> //            退出;<br> //        }<br> //    }<br>     公用函數 getaccesstoken()<br>     {<br>         $access_token = S('access_token');<br>         if(!empty($access_token)){<br> <br>             返回 $access_token;<br>         }其他{<br>             $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $this->appid。 “&秘密=”。             $ret = $this->curlget($url);<br>            $ret = json_decode($ret,true);<br>             S('access_token',$ret['access_token'],7100);<br>     <br>             返回 $ret['access_token'];<br>         }<br>     }<br>     //依照openid拉取使用者資訊<br>     公用函數使用者資訊($openid){<br>         $access_token = $this->getaccesstoken();<br>         $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";<br>         $userinfo = json_decode($this->curlget($url),true);<br>         回 $userinfo;<br>     }<br>     函數 p($arr){<br>         echo "<meta> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">&quot;;&lt;br&gt;         print_r($arr);&lt;br&gt;     }&lt;br&gt;     函數curlget($url)&lt;br&gt;     {&lt;br&gt;         $ch = curl_init();&lt;br&gt;         curl_setopt($ch, CURLOPT_URL, $url);&lt;br&gt;         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);&lt;br&gt;         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);&lt;br&gt;         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);&lt;br&gt;         curl_setopt($ch, CURLOPT_HEADER, 0);&lt;br&gt;         $輸出= curl_exec($ch);&lt;br&gt;         curl_close($ch);&lt;br&gt;         則為$輸出;&lt;br&gt;     }&lt;br&gt;     公用函數 jingmo($url,$code,$state){&lt;br&gt;         如果($代碼){&lt;br&gt; $url = &quot;https://api.weixin.qq.com/sns/oauth2/access_token?appid=&quot;.$this-&gt;appid.&quot;&amp;secret=&quot;.$this-&gt;appsecret.&quot;&amp;code=&quot;. $code .&quot;&amp;grant_type=authorization_code&quot;;&lt;br&gt;             $arrtemp = json_decode($this-&gt;curlget($url),true);&lt;br&gt;             $ret = $this-&gt;getuserinfo($arrtemp['openid'],$arrtemp['access_token']);&lt;br&gt;             則返回 $ret;&lt;br&gt;         }其他{&lt;br&gt; $url = &quot;https://open.weixin.qq.com/connect/oauth2/authorize?appid=&quot;.$this-&gt;appid.&quot;&amp;redirect_uri=&quot;.$url.&quot;&amp;response_type=code&amp;scope=snsapi_userinfo&amp;state=&quot;. $ state.&quot;#wechat_redirect&quot;;&lt;br&gt;             header(&quot;位置:$url&quot;);&lt;br&gt;         }&lt;br&gt;     }&lt;br&gt;     公用函數 getuserinfo($openid,$user_access_token){&lt;br&gt;         $userurl = &quot;https://api.weixin.qq.com/sns/userinfo?access_token=&quot;.$user_access_token.&quot;&amp;openid=&quot;.$openid.&quot;&amp;lang=zh_CN&quot;;&lt;br&gt;         $userinfo = json_decode($this-&gt;curlget($userurl),true);&lt;br&gt;         回 $userinfo;&lt;br&gt;     }&lt;br&gt;     公用函數 getjsapi_ticket(){&lt;br&gt;         $js_ticket = S(&quot;js_ticket&quot;);&lt;br&gt;         if(!empty($js_ticket)){&lt;br&gt;             返回 $js_ticket;&lt;br&gt;         }其他{&lt;br&gt;            $access_token = $this-&gt;getaccesstoken();&lt;br&gt;             $url = &quot;https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=&quot;.$access_token.&quot;&amp;type=jsapi&quot;;&lt;br&gt;             $res = json_decode($this-&gt;curlget($url),true);&lt;br&gt;             S(&quot;js_ticket&quot;,$res['ticket'],7100);&lt;br&gt;             則返回 $res['ticket'];&lt;br&gt;         }&lt;br&gt;     }&lt;br&gt;     公用函數 getjssign(){&lt;br&gt;         echo &quot;&lt;meta&gt;&quot;;&lt;br&gt;         $js_ticket = $this-&gt;getjsapi_ticket();&lt;br&gt;         $時間 = 時間();&lt;br&gt;         $arr = 陣列(&lt;br&gt;             'noncestr'=&gt;md5($time),&lt;br&gt;             'jsapi_ticket'=&gt;$js_ticket,&lt;br&gt;             '時間戳記'=&gt;$時間,&lt;br&gt;             'url'=&gt;'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'],&lt;br&gt; &lt;br&gt;         );&lt;br&gt;         $this-&gt;p($arr);&lt;br&gt;         ksort($arr);&lt;br&gt;         $string=&quot;&quot;;&lt;br&gt;         $i=1;&lt;br&gt;         foreach($arr as $key=&gt;$val){&lt;br&gt;             如果($i==1){&lt;br&gt;                 $string.=$key.&quot;=&quot;.$val;&lt;br&gt;             }其他{&lt;br&gt;                 $string.=&quot;&amp;&quot;.$key.&quot;=&quot;.$val;&lt;br&gt;             }&lt;br&gt;             $i++;&lt;br&gt;             迴聲 $i;&lt;br&gt;         }&lt;br&gt;         // 回顯 $string;&lt;br&gt;         $signature=strtolower($string);&lt;br&gt;         $signature =  sha1($string);&lt;br&gt;         $jsconfig=陣列(&lt;br&gt;             '調試'=&gt;true,&lt;br&gt;             'appId'=&gt;$this-&gt;appid,&lt;br&gt;             '時間戳記'=&gt;$時間,&lt;br&gt;             'nonceStr'=&gt;md5($time),&lt;br&gt;             '已簽名'=&gt;$簽署,&lt;br&gt;             ' jsApiList'=&gt;&quot;['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ']&quot;,&lt;br&gt;         );&lt;br&gt;         $json=json_encode($jsconfig);&lt;br&gt;         返回 $json;&lt;br&gt;     }&lt;br&gt;     //產生大寫簽章&lt;br&gt;     函數 createsign($arr,$biaozhi){&lt;br&gt;         ksort($arr);&lt;br&gt;         $string=&quot;&quot;;&lt;br&gt;         $i=1;&lt;br&gt;         foreach($arr as $key=&gt;$val){&lt;br&gt;             如果($i==1){&lt;br&gt;                $string.=$key.&quot;=&quot;.$val;&lt;br&gt;             }其他{&lt;br&gt;                 $string.=&quot;&amp;&quot;.$key.&quot;=&quot;.$val;&lt;br&gt;             }&lt;br&gt;             $i++;&lt;br&gt;         }&lt;br&gt;         $signtemp=「$string&amp;key=」。 $this-&gt;wechatkey;&lt;br&gt;         $sign = strtoupper(MD5($signtemp));&lt;br&gt;         $arr[$biaozhi] = $sign;&lt;br&gt;         //$json=json_encode($arr);&lt;br&gt;         返回 $arr;&lt;br&gt;     }&lt;br&gt;     //付款&lt;br&gt; &lt;br&gt;     //啟動付款&lt;br&gt;     公用函數 sendpay($openid, $title, $out_trade_no, $total_fee, $notify_url)&lt;br&gt;     {&lt;br&gt;         $時間 = 時間();&lt;br&gt;         $arr = 陣列(&lt;br&gt;             'appid'=&gt; $this-&gt;appid,&lt;br&gt;             'mch_id'=&gt;; $這個-&gt;mchid,&lt;br&gt;             'nonce_str'=&gt;; md5($時間),&lt;br&gt;             '身體' =&gt; “kjhk”,&lt;br&gt;             'out_trade_no'=&gt;; $out_trade_no,&lt;br&gt;             'total_fee' =&gt;; $total_fee,&lt;br&gt;             'spbil_create_ip' =&gt;; “127.0.0.1”,&lt;br&gt;             'notify_url' =&gt;; $notify_url,&lt;br&gt;             'trade_type' =&gt;; “JSAPI”,&lt;br&gt;             'openid' =&gt;; $openid,&lt;br&gt;         );&lt;br&gt;         $biaozhi ='sign';&lt;br&gt;         $arr = $this-&gt;createsign($arr,$biaozhi);&lt;br&gt;         $xml = 「&lt;xml&gt;」;&lt;br&gt;         foreach($arr as $key=&gt;$val){&lt;br&gt;             $xml.=&quot;&quot;.$val.&quot;&quot;.$key.&quot;&gt;&quot;;&lt;br&gt;         }&lt;br&gt;         $xml.=&quot;&lt;/xml&gt;&quot;;&lt;br&gt;         $url = &quot;https://api.mch.weixin.qq.com/pay/unifiedorder&quot;;&lt;br&gt;         $resxml =  $this-&gt;postCurlTransfer($url,$xml);&lt;br&gt;         $res = simplexml_load_string($resxml);&lt;br&gt;         $cutime = time();&lt;br&gt;         $jsapiarr=陣列(&lt;br&gt;             'appId'=&gt;$this-&gt;appid,&lt;br&gt;             'timeStamp'=&gt;&quot;$cutime&quot;,&lt;br&gt;             'nonceStr'=&gt;md5($cutime),&lt;br&gt;             'package'=&gt;&quot;prepay_id=&quot;.$res-&gt;prepay_id,&lt;br&gt;             'signType'=&gt;&quot;MD5&quot;,&lt;br&gt;         );&lt;br&gt;        $biaozhi = 'paySign';&lt;br&gt;         $jsapi = $this-&gt;createsign($jsapiarr,$biaozhi);&lt;br&gt;        // $jsapijson = json_encode($jsapi);&lt;br&gt;         返回 $jsapi;&lt;br&gt;     }&lt;br&gt;     公用函數 getpaysign(){&lt;br&gt;         $時間 = 時間();&lt;br&gt;         $arr = 陣列(&lt;br&gt;             'appid'=&gt;$this-&gt;appid,&lt;br&gt;             'mch_id'=&gt;$this-&gt;mchid,&lt;br&gt;             'nonce_str'=&gt;md5($time),&lt;br&gt;             'body'=&gt;&quot;sdf&quot;,&lt;br&gt;             'out_trade_no'=&gt;&quot;2016&quot;.$time,&lt;br&gt;             'total_fee'=&gt;1,&lt;br&gt;             'spbill_create_ip'=&gt;&quot;127.0.0.1&quot;,&lt;br&gt;             'notify_url'=&gt;&quot;http://www.baidu.com&quot;,&lt;br&gt;             'trade_type'=&gt;&quot;JSAPI&quot;,&lt;br&gt;         );&lt;br&gt;         ksort($arr);&lt;br&gt;         $string=&quot;&quot;;&lt;br&gt;         $i=1;&lt;br&gt;         foreach($arr as $key=&gt;$val){&lt;br&gt;             如果($i==1){&lt;br&gt;                 $string.=$key.&quot;=&quot;.$val;&lt;br&gt;             }其他{&lt;br&gt;                 $string.=&quot;&amp;&quot;.$key.&quot;=&quot;.$val;&lt;br&gt;             }&lt;br&gt;             $i++;&lt;br&gt;         }&lt;br&gt;         $string.=&quot;&amp;key=&quot;.$this-&gt;wechatkey;&lt;br&gt;         $sign = strtoupper(md5($string));&lt;br&gt;         $arr['sign'] = $sign;&lt;br&gt;         返回 $arr;&lt;br&gt;     }&lt;br&gt;     函數 Post($curlPost,$url){&lt;br&gt;         $curl=curl_init();&lt;br&gt;         curl_setopt($curl, CURLOPT_URL, $url);&lt;br&gt;         curl_setopt($curl, CURLOPT_HEADER, false);&lt;br&gt;         curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);&lt;br&gt;         curl_setopt($curl, CURLOPT_NOBODY, true);&lt;br&gt;         curl_setopt($curl, CURLOPT_POST, true);&lt;br&gt;         curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);&lt;br&gt;         $return_str = curl_exec($curl);&lt;br&gt;         curl_close($curl);&lt;br&gt;         返回 $return_str;&lt;br&gt;     }&lt;br&gt;     私有函數 postCurlTransfer($url, $data)&lt;br&gt;     {&lt;br&gt;         $curl=curl_init();&lt;br&gt;         curl_setopt($curl, CURLOPT_URL, $url);&lt;br&gt;         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);&lt;br&gt;         curl_setopt($curl, CURLOPT_POST, 1);&lt;br&gt;         curl_setopt($curl, CURLOPT_POSTFIELDS, $data);&lt;br&gt;        $str = curl_exec($curl);&lt;br&gt;         curl_close($curl);&lt;br&gt; &lt;br&gt;         return $str;&lt;br&gt;     }&lt;br&gt;     //傳送範本訊息&lt;br&gt;     public function sendtpl($openid, $url, $template_id, $content, $topcolor=&quot;#FF0000&quot;)&lt;br&gt;     {&lt;br&gt;         $arr = array(&lt;br&gt;             'touser' =&gt; $openid,&lt;br&gt;             'template_id' =&gt; $template_id,&lt;br&gt;             'url' =&gt; $url,&lt;br&gt;             'topcolor' =&gt; $topcolor,&lt;br&gt;             'data' =&gt; $content,&lt;br&gt;         );&lt;br&gt;         $arrjson = json_encode($arr);&lt;br&gt;         $accesstoken = $this-&gt;getAccessToken();&lt;br&gt;         $sendurl = &quot;https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=&quot;.$accesstoken;&lt;br&gt;         return $this-&gt;postCurlTransfer($sendurl, $arrjson);&lt;br&gt;     }&lt;br&gt; }</pre><div class="contentsignin">登入後複製</div></div>上面的是微信支付簡單封裝

若發起支付,請先對應微信公眾號的資料。
包括微信支付目錄
我這裡是
http://網域//index.php/Home/Index/
好像是這個

取得access_token的過程<?php <br /> /**<br>  * 由 PhpStorm 建立。 <br>  * 用戶:sks<br>  * 日期:16/7/8<br>  * 時間:下午3:54<br>  */<br> namespace HomeController;<br> use CommonControllerHomebaseController;<br> Class WeixinController extends HomebaseController{<br>     public function zhanshi(){<br>         $weixin = new OrgWeixin;<br>         $code = $_GET['code'];<br>         $state = $_GET['state'];<br>         $url="";<br>         $userinfo = $weixin->jingmo($url, $code, $state);<br>         session('userinfo',$userinfo);<br>         if($code) {<br>             header("Location: $state");<br>         }else{<br>         }<br>     }<br> }公用函數
function.phpfunction getuserinfo(){   //取得使用者資訊<br>     import("weixin");<br>     $weixin = new OrgWeixin;<br>     $info = session('userinfo');<br>     if($info){<br>         return $info;<br>         die;<br>     }else {<br>         $state = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];<br>         $code = '';<br>         $url = 'http://' . $_SERVER['HTTP_HOST'] . U('Home/Weixin/zhanshi');<br>         $url = urlencode($url);<br>         $weixin->jingmo($url, $code, $state);<br>     }<br> }測試支付<?php <br /> /**<br>  * Created by PhpStorm.<br>  * User: sks<br>  * Date: 16/7/8<br> * Time: 下午3:29<br>  */<br> namespace HomeController;<br> use CommonControllerHomebaseController;<br> use ThinkPage;<br> Class IndexController extends HomebaseController{<br> <br>     //測試支付<br>     public function zhifu()<br>     {<br>         $userinfo =  getuserinfo(); //取得微信使用者資訊以呼叫公用函數<br>         $openid = $userinfo['openid'];<br>         $time = time();<br>         $title = "我支付";<br>         $out_trade_no = date('Y',time()).$time.rand(1000,2000);<br>         $total_fee = 1;<br>         $notify_url = "http://網域/index.php/Home/Index/paynotify";//回呼網址<br>         $weixin = new OrgWeixin;<br>         $result = $weixin->sendpay($openid, $title, $out_trade_no, $total_fee, $notify_url);<br>         $this->assign('result',$result);<br>         $this->display();<br>     }<br> //這裡是付款結果通知<br>     public function paynotify(){<br>         $weixin = new OrgWeixin;<br>         $xml = file_get_contents("php://input");<br>         $p = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);<br>         $arr = $this->object_array($p);<br>         $out_trade_no = $arr['out_trade_no'];<br>         $transaction_id= $arr['transaction_id'];<br>         $openid = $arr['openid'];<br>         $sign = $arr['sign'];<br>         //處理支付結果<br>         unset($arr['sign']);<br>         $biaozhi = "sign";<br>         $ret = $weixin->createsign($arr, $biaozhi);<br>         if($ret['sign'] === $sign) {<br>             $aa = "成功";<br>         } else {<br>             $aa = "失敗";<br>         }<br>         $file  = './logweixin.txt';//要寫入檔案的檔案名稱(可以是任一檔案名稱),若檔案不存在,將會建立一個<br>         $content = $out_trade_no."***".$transaction_id."第一次寫入的內容n";<br>         if($f  = file_put_contents($file, $content,FILE_APPEND)){// 這個函數支援版本(PHP 5)<br>                       echo "寫入成功。<br>";<br>           }<br>     //這裡處理付款結果的過程<br>         echo "success";<br>     }<br> <br>     public function getaccesstoken(){<br>         $weixin = new OrgWeixin;<br>         echo $weixin->getaccesstoken();<br> <br>     }<br> }

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板