Ich habe an WeChat gearbeitet und bin auf viele Fallstricke gestoßen, damit jeder Umwege vermeiden kann. Wenn Sie etwas nicht verstehen, können Sie es tun Kontaktieren Sie mich unter QQ1034100429 oder senden Sie eine private Nachricht.
getaccesstoken Holen Sie sich access_token
//Zahlung veranlassen
öffentliche Funktion sendpay($openid, $title, $out_trade_no, $total_fee, $notify_url)
sendtpl sendet eine Vorlagennachricht<?php<br />
/**<br />
* Erstellt von PhpStorm.<br />
* Benutzer: Administrator<br />
* Datum: 11.04.2016<br />
* Zeit: 22:43<br />
*/<br />
Namespace Org;<br />
Klasse Weixin<br />
{<br />
Private $appid; //appid des öffentlichen WeChat-Kontos<br />
Privates $appsecret; //appsecret des öffentlichen WeChat-Kontos<br />
Privat $mchid; //Händler-ID des offiziellen WeChat-Kontos<br />
Privater $wechatkey; //Zahlungsschlüssel für das offizielle WeChat-Konto<br />
private$token;<br />
Öffentliche Funktion __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>
Öffentliche Funktion chushi()<br>
{<br>
echo $this->getaccesstoken();<br>
}<br>
Öffentliche Funktion 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>
} sonst {<br>
return false;<br>
}<br>
}<br>
Öffentliche Funktion valid()<br>
{<br>
$echoStr = $_GET['echostr'];<br>
if ($this->checkSignature()) {<br>
echo $echoStr;<br>
beenden;<br>
}<br>
}<br>
//// Führen Sie entsprechend den zurückgegebenen Informationen eine entsprechende Verarbeitung durch <br>
// öffentliche Funktion ResponseMsg()<br>
// {<br>
// $postStr = file_get_contents('php://input');<br>
// if (!empty($postStr)){<br>
// /* libxml_disable_entity_loader soll XML eXternal Entity Injection verhindern,<br>
// Der beste Weg ist, die Gültigkeit von XML selbst zu überprüfen */<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><![CDATA[%s]]></ToUserName><br>
// <FromUserName><![CDATA[%s]]></FromUserName><br>
// <CreateTime>%s</CreateTime><br>
// <MsgType><![CDATA[%s]]></MsgType><br>
// <Content><![CDATA[%s]]></Content><br>
// <FuncFlag>0</FuncFlag><br>
// </xml>";<br>
// if(!empty( $keyword ))<br>
// {<br>
// $msgType = "text";<br>
// $contentStr = "Willkommen in der Wechat-Welt!";<br>
// $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);<br>
// echo $resultStr;<br>
// }else{<br>
// echo "Geben Sie etwas ein...";<br>
// }<br>
//<br>
// }else {<br>
// echo "";<br>
// exit;<br>
// }<br>
// }<br>
öffentliche Funktion 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>
öffentliche Funktion 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>
Funktion p($arr){<br>
echo "<meta charset='utf8'><pre class="brush:php;toolbar:false">";<br>
print_r($arr);<br>
}<br>
Funktion curlget($url)<br>
{<br>
$ch = curl_init();<br>
curl_setopt($ch, CURLOPT_URL, $url);<br>
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);<br>
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);<br>
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br>
curl_setopt($ch, CURLOPT_HEADER, 0);<br>
$output = curl_exec($ch);<br>
curl_close($ch);<br>
return $output;<br>
}<br>
öffentliche Funktion jingmo($url,$code,$state){<br>
if($code){<br>
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$this->appid."&secret=".$this->appsecret."&code=". $code."&grant_type=authorization_code";<br>
$arrtemp = json_decode($this->curlget($url),true);<br>
$ret = $this->getuserinfo($arrtemp['openid'],$arrtemp['access_token']);<br>
return $ret;<br>
}else{<br>
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$this->appid."&redirect_uri=".$url."&response_type=code&scope=snsapi_userinfo&state=". $state."#wechat_redirect";<br>
header("Standort: $url");<br>
}<br>
}<br>
öffentliche Funktion getuserinfo($openid,$user_access_token){<br>
$userurl = "https://api.weixin.qq.com/sns/userinfo?access_token=".$user_access_token."&openid=".$openid."&lang=zh_CN";<br>
$userinfo = json_decode($this->curlget($userurl),true);<br>
return $userinfo;<br>
}<br>
öffentliche Funktion getjsapi_ticket(){<br>
$js_ticket = S("js_ticket");<br>
if(!empty($js_ticket)){<br>
return $js_ticket;<br>
}else{<br> $access_token = $this->getaccesstoken();<br>
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$access_token."&type=jsapi";<br>
$res = json_decode($this->curlget($url),true);<br>
S("js_ticket",$res['ticket'],7100);<br>
return $res['ticket'];<br>
}<br>
}<br>
öffentliche Funktion getjssign(){<br>
echo "<meta charset='utf8'>";<br>
$js_ticket = $this->getjsapi_ticket();<br>
$time = time();<br>
$arr = array(<br>
'noncestr'=>md5($time),<br>
'jsapi_ticket'=>$js_ticket,<br>
'timestamp'=>$time,<br>
'url'=>'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'],<br>
<br>
);<br>
$this->p($arr);<br>
ksort($arr);<br>
$string="";<br>
$i=1;<br>
foreach($arr as $key=>$val){<br>
if($i==1){<br>
$string.=$key."=".$val;<br>
}else{<br>
$string.="&".$key."=".$val;<br>
}<br>
$i ;<br>
echo $i;<br>
}<br>
// echo $string;<br>
$signatur =strtolower($string);<br>
$signatur = sha1($string);<br>
$jsconfig = array(<br>
'debug'=>true,<br>
'appId'=>$this->appid,<br>
'timestamp'=>$time,<br>
'nonceStr'=>md5($time),<br>
'signature'=>$signature,<br>
' jsApiList'=>"['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ']",<br>
);<br>
$json = json_encode($jsconfig);<br>
return $json;<br>
}<br>
//生成大写签名<br>
Funktion createsign($arr,$biaozhi){<br>
ksort($arr);<br>
$string="";<br>
$i=1;<br>
foreach($arr as $key=>$val){<br>
if($i==1){<br> $string.=$key."=".$val;<br>
}else{<br>
$string.="&".$key."=".$val;<br>
}<br>
$i ;<br>
}<br>
$signtemp = "$string&key=" . $this->wechatkey;<br>
$sign = strtoupper(MD5($signtemp));<br>
$arr[$biaozhi] = $sign;<br>
//$json = json_encode($arr);<br>
return $arr;<br>
}<br>
//支付<br>
<br>
//发起支付<br>
öffentliche Funktion sendpay($openid, $title, $out_trade_no, $total_fee, $notify_url)<br>
{<br>
$time = time();<br>
$arr = array(<br>
'appid' => $this->appid,<br>
'mch_id' => $this->mchid,<br>
'nonce_str' => md5($time),<br>
'body' => „kjhk“,<br>
'out_trade_no' => $out_trade_no,<br>
'total_fee' => $total_fee,<br>
'spbill_create_ip' => „127.0.0.1“,<br>
'notify_url' => $notify_url,<br>
'trade_type' => „JSAPI“,<br>
'openid' => $openid,<br>
);<br>
$biaozhi ='sign';<br>
$arr = $this->createsign($arr,$biaozhi);<br>
$xml = "<xml>";<br>
foreach ($arr as $key=>$val) {<br>
$xml.="<".$key.">".$val."</".$key.">";<br>
}<br>
$xml.="</xml>";<br>
$url = "https://api.mch.weixin.qq.com/pay/unifiedorder";<br>
$resxml = $this->postCurlTransfer($url,$xml);<br>
$res = simplexml_load_string($resxml);<br>
$cutime = time();<br>
$jsapiarr=array(<br>
'appId'=>$this->appid,<br>
'timeStamp'=>"$cutime",<br>
'nonceStr'=>md5($cutime),<br>
'package'=>"prepay_id=".$res->prepay_id,<br>
'signType'=>"MD5",<br>
);<br> $biaozhi = 'paySign';<br>
$jsapi = $this->createsign($jsapiarr,$biaozhi);<br>
// $jsapijson = json_encode($jsapi);<br>
return $jsapi;<br>
}<br>
öffentliche Funktion getpaysign(){<br>
$time = time();<br>
$arr = array(<br>
'appid'=>$this->appid,<br>
'mch_id'=>$this->mchid,<br>
'nonce_str'=>md5($time),<br>
'body'=>"sdf",<br>
'out_trade_no'=>"2016".$time,<br>
'total_fee'=>1,<br>
'spbill_create_ip'=>"127.0.0.1",<br>
'notify_url'=>"http://www.baidu.com",<br>
'trade_type'=>"JSAPI",<br>
);<br>
ksort($arr);<br>
$string="";<br>
$i=1;<br>
foreach($arr as $key=>$val){<br>
if($i==1){<br>
$string.=$key."=".$val;<br>
}else{<br>
$string.="&".$key."=".$val;<br>
}<br>
$i ;<br>
}<br>
$string.="&key=".$this->wechatkey;<br>
$sign = strtoupper(md5($string));<br>
$arr['sign'] = $sign;<br>
return $arr;<br>
}<br>
Funktion Post($curlPost,$url){<br>
$curl = curl_init();<br>
curl_setopt($curl, CURLOPT_URL, $url);<br>
curl_setopt($curl, CURLOPT_HEADER, false);<br>
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);<br>
curl_setopt($curl, CURLOPT_NOBODY, true);<br>
curl_setopt($curl, CURLOPT_POST, true);<br>
curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);<br>
$return_str = curl_exec($curl);<br>
curl_close($curl);<br>
return $return_str;<br>
}<br>
private Funktion postCurlTransfer($url, $data)<br>
{<br>
$curl = curl_init();<br>
curl_setopt($curl, CURLOPT_URL, $url);<br>
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);<br>
curl_setopt($curl, CURLOPT_POST, 1);<br>
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);<br> $str = curl_exec($curl);<br>
curl_close($curl);<br>
<br>
return $str;<br>
}<br>
//Vorlagennachricht senden<br>
Öffentliche Funktion sendtpl($openid, $url, $template_id, $content, $topcolor="#FF0000")<br>
{<br>
$arr = array(<br>
'touser' => $openid,<br>
'template_id' => $template_id,<br>
'url' => $url,<br>
'topcolor' => $topcolor,<br>
'data' => $content,<br>
);<br>
$arrjson = json_encode($arr);<br>
$accesstoken = $this->getAccessToken();<br>
$sendurl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$accesstoken;<br>
return $this->postCurlTransfer($sendurl, $arrjson);<br>
}<br>
}
Das Obige ist ein einfaches WeChat-Zahlungspaket
Wenn Sie eine Zahlung veranlassen, stimmen Sie bitte zunächst den Informationen des offiziellen WeChat-Kontos zu.
Beinhaltet das WeChat-Zahlungsverzeichnis
Das ist
http://Domänenname//index.php/Home/Index/
Es scheint so
Der Prozess zum Erhalten des 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>
}
/**function 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>
}
* Erstellt von PhpStorm.<code class="prettyprint linenums lang-php">
* Benutzer: sks<br>
* Datum: 16.7.8<br>
* Zeit: 下午3:54<br>
*/<br>
Namespace HomeController;<br>
verwenden Sie CommonControllerHomebaseController;
Die Klasse WeixinController erweitert HomebaseController{
Öffentliche Funktion zhanshi(){
$weixin = new OrgWeixin;
$code = $_GET['code'];
$state = $_GET['state'];
$url="";
$userinfo = $weixin->jingmo($url, $code, $state);
Sitzung('userinfo',$userinfo);
if($code) {
header("Location: $state");
}sonst{
}
}
}Öffentliche Funktion
function.phpfunction getuserinfo(){ //Benutzerinformationen abrufen
Import("weixin");
$weixin = neues OrgWeixin;
$info = session('userinfo');
If($info){
return $info;
sterben;
}else {
$state = 'http://' . $_SERVER['HTTP_HOST']
$code =
$url = 'http://' . $_SERVER['HTTP_HOST'] U('Home/Weixin/zhanshi');
$url = urlencode($url);
$weixin->jingmo($url, $code, $state);
}
}Testzahlung<?php<🎜>
/**<🎜>
*Erstellt von PhpStorm.<🎜>
* Benutzer: sks<🎜>
* Datum: 16.7.8<🎜>* Zeit: 15:29 Uhr<br />
*/<br />
Namespace HomeController;<br />
verwenden Sie CommonControllerHomebaseController;<br />
Verwenden Sie ThinkPage;<br />
Die Klasse IndexController erweitert HomebaseController{<br />
<br />
//Testzahlung<br />
Öffentliche Funktion zhifu()<br />
{<br />
$userinfo = getuserinfo(); //WeChat-Benutzerinformationen abrufen und öffentliche Funktion aufrufen<br />
$openid = $userinfo['openid'];<br />
$time = time();<br />
$title = "Ich möchte bezahlen";<br />
$out_trade_no = date('Y',time()).$time.rand(1000,2000);<br />
$total_fee = 1;<br />
$notify_url = "http://domain name/index.php/Home/Index/paynotify";//Rückruf-URL<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>
//Hier ist die Benachrichtigung über das Zahlungsergebnis<br>
Öffentliche Funktion 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>
//Zahlungsergebnisse verarbeiten<br>
unset($arr['sign']);<br>
$biaozhi = "sign";<br>
$ret = $weixin->createsign($arr, $biaozhi);<br>
If($ret['sign'] === $sign) {<br>
$aa = "Erfolg";<br>
} sonst {<br>
$aa = "Fehler";<br>
}<br>
$file = './logweixin.txt';// Der Dateiname der zu schreibenden Datei (kann ein beliebiger Dateiname sein). Wenn die Datei nicht existiert, wird sie erstellt <br>
$content = $out_trade_no."***".$transaction_id."Erster geschriebener Inhalt n";<br>
If($f = file_put_contents($file, $content,FILE_APPEND)){//Diese Funktion unterstützt Version (PHP 5)<br>
echo „Schreiben erfolgreich.<br />“;<br>
}<br>
//Hier ist der Prozess der Verarbeitung der Zahlungsergebnisse<br>
echo „Erfolg“;<br>
}<br>
<br>
Öffentliche Funktion getaccesstoken(){<br>
$weixin = new OrgWeixin;<br>
echo $weixin->getaccesstoken();<br>
<br>
}<br>
}