search
Homephp教程php手册WeChat payment packaged in 2016 is so easy to use

I have been working on WeChat and encountered many pitfalls. I wrote it down today so that everyone can avoid detours. It is my first time to write text, which is a bit crude. If there is anything you don’t understand, you can contact me at QQ1034100429, or send a private message.
getaccesstoken Get access_token
//Initiate payment
public function sendpay($openid, $title, $out_trade_no, $total_fee, $notify_url)

sendtpl sends template messages<?php <br /> /**<br>  * Created by PhpStorm.<br>  * User: Administrator<br>  * Date: 2016/4/11<br>  * Time: 22:43<br>  */<br> namespace Org;<br> class Weixin<br> {<br> Private $appid; //Appid of WeChat official account<br> Private $appsecret; //appsecret of WeChat public account<br> Private $mchid; //The merchant account of the WeChat public account<br> Private $wechatkey; //Payment key for WeChat official account<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> ////According to the returned information, make corresponding processing<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> //                            <content></content><br> //                            <funcflag>0</funcflag><br> //                            </xml>";<br> //            if(!empty( $keyword ))<br> //            {<br> //                $msgType = "text";<br> //                $contentStr = "Welcome to wechat world!";<br> //                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);<br> //                echo $resultStr;<br> //            }else{<br> //                echo "Input something...";<br> //            }<br> //<br> //        }else {<br> //            echo "";<br> //            exit;<br> //        }<br> //    }<br>     public function getaccesstoken()<br>     {<br>         $access_token = S('access_token');<br>         if(!empty($access_token)){<br> <br>             return $access_token;<br>         }else{<br>             $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $this->appid . "&secret=" . $this->appsecret;;<br>             $ret = $this->curlget($url);<br>            $ret = json_decode($ret,true);<br>             S('access_token',$ret['access_token'],7100);<br>     <br>             return $ret['access_token'];<br>         }<br>     }<br>     //根据openid拉取用户信息<br>     public  function userinfo($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>         return $userinfo;<br>     }<br>     function p($arr){<br>         echo "<meta> <pre class="brush:php;toolbar:false">&quot;;&lt;br&gt;         print_r($arr);&lt;br&gt;     }&lt;br&gt;     function 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;         $output = curl_exec($ch);&lt;br&gt;         curl_close($ch);&lt;br&gt;         return $output;&lt;br&gt;     }&lt;br&gt;     public function jingmo($url,$code,$state){&lt;br&gt;         if($code){&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;             return  $ret;&lt;br&gt;         }else{&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;Location: $url&quot;);&lt;br&gt;         }&lt;br&gt;     }&lt;br&gt;     public function 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;         return $userinfo;&lt;br&gt;     }&lt;br&gt;     public function getjsapi_ticket(){&lt;br&gt;         $js_ticket = S(&quot;js_ticket&quot;);&lt;br&gt;         if(!empty($js_ticket)){&lt;br&gt;             return $js_ticket;&lt;br&gt;         }else{&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;             return $res['ticket'];&lt;br&gt;         }&lt;br&gt;     }&lt;br&gt;     public function getjssign(){&lt;br&gt;         echo &quot;&lt;meta&gt;&quot;;&lt;br&gt;         $js_ticket = $this-&gt;getjsapi_ticket();&lt;br&gt;         $time = time();&lt;br&gt;         $arr = array(&lt;br&gt;             'noncestr'=&gt;md5($time),&lt;br&gt;             'jsapi_ticket'=&gt;$js_ticket,&lt;br&gt;             'timestamp'=&gt;$time,&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;             if($i==1){&lt;br&gt;                 $string.=$key.&quot;=&quot;.$val;&lt;br&gt;             }else{&lt;br&gt;                 $string.=&quot;&amp;&quot;.$key.&quot;=&quot;.$val;&lt;br&gt;             }&lt;br&gt;             $i++;&lt;br&gt;             echo $i;&lt;br&gt;         }&lt;br&gt;         // echo $string;&lt;br&gt;         $signature =strtolower($string);&lt;br&gt;         $signature =  sha1($string);&lt;br&gt;         $jsconfig = array(&lt;br&gt;             'debug'=&gt;true,&lt;br&gt;             'appId'=&gt;$this-&gt;appid,&lt;br&gt;             'timestamp'=&gt;$time,&lt;br&gt;             'nonceStr'=&gt;md5($time),&lt;br&gt;             'signature'=&gt;$signature,&lt;br&gt;             ' jsApiList'=&gt;&quot;['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ']&quot;,&lt;br&gt;         );&lt;br&gt;         $json = json_encode($jsconfig);&lt;br&gt;         return $json;&lt;br&gt;     }&lt;br&gt;     //生成大写签名&lt;br&gt;     function 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;             if($i==1){&lt;br&gt;                $string.=$key.&quot;=&quot;.$val;&lt;br&gt;             }else{&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 = &quot;$string&amp;key=&quot; . $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;         return $arr;&lt;br&gt;     }&lt;br&gt;     //支付&lt;br&gt; &lt;br&gt;     //发起支付&lt;br&gt;     public function sendpay($openid, $title, $out_trade_no, $total_fee, $notify_url)&lt;br&gt;     {&lt;br&gt;         $time = time();&lt;br&gt;         $arr = array(&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;kjhk&quot;,&lt;br&gt;             'out_trade_no' =&gt; $out_trade_no,&lt;br&gt;             'total_fee' =&gt; $total_fee,&lt;br&gt;             'spbill_create_ip' =&gt; &quot;127.0.0.1&quot;,&lt;br&gt;             'notify_url' =&gt; $notify_url,&lt;br&gt;             'trade_type' =&gt; &quot;JSAPI&quot;,&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 = &quot;&lt;xml&gt;&quot;;&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=array(&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;         return $jsapi;&lt;br&gt;     }&lt;br&gt;     public function getpaysign(){&lt;br&gt;         $time = time();&lt;br&gt;         $arr = array(&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;             if($i==1){&lt;br&gt;                 $string.=$key.&quot;=&quot;.$val;&lt;br&gt;             }else{&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;         return $arr;&lt;br&gt;     }&lt;br&gt;     function 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 $return_str;&lt;br&gt;     }&lt;br&gt;     private function 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; //Send template message&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>The above is a simple package of WeChat payment

If you initiate payment, please first correspond to the information of the WeChat official account.
Including WeChat payment directory
I am here
http://domain name//index.php/Home/Index/
It seems to be this

The process of obtaining access_token<?php <br /> /**<br>  * Created by PhpStorm.<br>  * User: sks<br>  * Date: 16/7/8<br>  * Time: 下午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> }Public function
function.phpfunction getuserinfo(){ //Get user information<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 =                                                               $url = 'http://' . $_SERVER['HTTP_HOST'] . U('Home/Weixin/zhanshi');<br> ​​​​$url = urlencode($url);<br>          $weixin->jingmo($url, $code, $state);<br> }<br> }<br>Test payment /**
* Created by PhpStorm.
*User: sks
* Date: 16/7/8
* Time: 3:29 pm
*/
namespace HomeController;
use CommonControllerHomebaseController;
use ThinkPage;
Class IndexController extends HomebaseController{

//Test payment
Public function zhifu()
{
                $userinfo =  getuserinfo(); //Get WeChat user information and call the public function
         $openid = $userinfo['openid'];
        $time = time();
​​​​$title = "I want to pay";
         $out_trade_no = date('Y',time()).$time.rand(1000,2000);
         $total_fee = 1;
         $notify_url = "http://domain name/index.php/Home/Index/paynotify";//Callback URL
        $weixin = new OrgWeixin;
$result = $weixin->sendpay($openid, $title, $out_trade_no, $total_fee, $notify_url);
         $this->assign('result',$result);
          $this->display();
}
//Here is the payment result notification
Public function paynotify(){
        $weixin = new OrgWeixin;
         $xml = file_get_contents("php://input");
         $p = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
         $arr = $this->object_array($p);
         $out_trade_no = $arr['out_trade_no'];
        $transaction_id= $arr['transaction_id'];
         $openid = $arr['openid'];
        $sign = $arr['sign'];
​​​​//Processing payment results
​​​​unset($arr['sign']);
        $biaozhi = "sign";
         $ret = $weixin->createsign($arr, $biaozhi);
If($ret['sign'] === $sign) {
              $aa = "Success";
                                       else {
              $aa = "Failure";
        }
​​​​​$file = './logweixin.txt';//The file name of the file to be written (can be any file name), if the file does not exist, it will be created
          $content = $out_trade_no."***".$transaction_id."First written content n";
If($f = file_put_contents($file, $content,FILE_APPEND)){//This function supports version (PHP 5)
echo "Writing successful.
";
           }
//The process of processing payment results here
          echo "success";
}

Public function getaccesstoken(){
        $weixin = new OrgWeixin;
echo $weixin->getaccesstoken();

}
}

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools