위챗을 하면서 많은 함정에 빠졌습니다. 모두가 우회하는 것을 피하기 위해 오늘 글을 쓰게 되었습니다. 조금 조잡한 내용이 있다면, QQ1034100429로 연락하시거나 개인 메시지를 보내주세요.
getaccesstoken access_token 가져오기
//결제 시작
공개 함수 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>
네임스페이스 조직;<br>
클래스 웨이신<br>
{<br>
비공개 $appid; //WeChat 공개 계정의 appid<br>
비공개 $appsecret; //WeChat 공개 계정의 appsecret<br>
Private $mchid; // 위챗 공식 계정의 판매자 ID <br>
Private $wechatkey; //위챗 공식 계정 결제 키<br>
비공개$토큰;<br>
공개 함수 __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>
공개 함수 chushi()<br>
{<br>
echo $this->getaccesstoken();<br>
}<br>
공개 함수 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>
true를 반환합니다.<br>
} else {<br>
false를 반환합니다.<br>
}<br>
}<br>
공개 함수 valid()<br>
{<br>
$echoStr = $_GET['echostr'];<br>
if ($this->checkSignature()) {<br>
echo $echoStr;<br>
나가세요;<br>
}<br>
}<br>
////반환된 정보에 따라 해당 처리를 합니다 <br>
// 공개 함수 responseMsg()<br>
// {<br>
// $postStr = file_get_contents('php://input');<br>
// if (!empty($postStr)){<br>
// /* libxml_disable_entity_loader는 XML eXternal Entity 주입을 방지하기 위한 것입니다.<br>
// 가장 좋은 방법은 xml의 유효성을 직접 확인하는 것입니다. */<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>
// 에코 "무언가를 입력하세요...";<br>
// }<br>
//<br>
// }else {<br>
// 에코 "";<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 . "&비밀=" . $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>
공개 기능 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>
$userinfo 반환;<br>
}<br>
함수 p($arr){<br>
echo "<meta>
<pre class="brush:php;toolbar:false">";<br>
print_r($arr);<br>
}<br>
함수 컬겟($url)<br>
{<br>
$ch = curl_init();<br>
컬_setopt($ch, CURLOPT_URL, $url);<br>
컬_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);<br>
컬_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);<br>
컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br>
컬_setopt($ch, CURLOPT_HEADER, 0);<br>
$output = curl_exec($ch);<br>
컬_닫기($ch);<br>
$output을 반환합니다.<br>
}<br>
공개 함수 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>
반환 $ret;<br>
}그밖에{<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("위치: $url");<br>
}<br>
}<br>
공개 함수 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>
$userinfo 반환;<br>
}<br>
공개 함수 getjsapi_ticket(){<br>
$js_ticket = S("js_ticket");<br>
if(!empty($js_ticket)){<br>
$js_ticket 반환;<br>
}그밖에{<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>
$res['ticket'];<br> 반환
}<br>
}<br>
공개 함수 getjssign(){<br>
echo "<meta>";<br>
$js_ticket = $this->getjsapi_ticket();<br>
$time = 시간();<br>
$arr = 배열(<br>
'noncestr'=>md5($time),<br>
'jsapi_ticket'=>$js_ticket,<br>
'타임스탬프'=>$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>
}그밖에{<br>
$string.="&".$key."=".$val;<br>
}<br>
$i ;<br>
에코 $i;<br>
}<br>
// 에코 $string;<br>
$signature =strtolower($string);<br>
$signature = sha1($string);<br>
$jsconfig = 배열(<br>
'디버그'=>참,<br>
'appId'=>$this->appid,<br>
'타임스탬프'=>$time,<br>
'nonceStr'=>md5($time),<br>
'서명'=>$서명,<br>
' jsApiList'=>"['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ']",<br>
);<br>
$json = json_encode($jsconfig);<br>
$json 반환;<br>
}<br>
//생성대写签명<br>
함수 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>
}그밖에{<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>
$arr 반환<br>
}<br>
//좋아요<br>
<br>
//发起支付<br>
공개 함수 sendpay($openid, $title, $out_trade_no, $total_fee, $notify_url)<br>
{<br>
$time = 시간();<br>
$arr = 배열(<br>
'앱' => $this->appid,<br>
'mch_id' => $this->mchid<br>
'nonce_str' => md5($time),<br>
'본문' => "ㅋㅋㅋㅋ",<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>
'무역 유형' => "JSAPI",<br>
'openid' => $openid<br>
);<br>
$biaozhi ='서명';<br>
$arr = $this->createsign($arr,$biaozhi);<br>
$xml = "<xml>";<br>
foreach($arr as $key=>$val) {<br>
$xml.="".$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 = 시간();<br>
$jsapiarr=배열(<br>
'appId'=>$this->appid,<br>
'timeStamp'=>"$cutime",<br>
'nonceStr'=>md5($cutime),<br>
'패키지'=>"prepay_id=".$res->prepay_id,<br>
'signType'=>"MD5",<br>
);<br> $biaozhi = 'paySign';<br>
$jsapi = $this->createsign($jsapiarr,$biaozhi);<br>
// $jsapijson = json_encode($jsapi);<br>
$jsapi를 반환합니다.<br>
}<br>
공개 함수 getpaysign(){<br>
$time = 시간();<br>
$arr = 배열(<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>
}그밖에{<br>
$string.="&".$key."=".$val;<br>
}<br>
$i ;<br>
}<br>
$string.="&key=".$this->wechatkey;<br>
$sign = strtoupper(md5($string));<br>
$arr['sign'] = $sign;<br>
$arr 반환<br>
}<br>
함수 포스트($curlPost,$url){<br>
$curl = curl_init();<br>
컬_setopt($curl, CURLOPT_URL, $url);<br>
컬_setopt($curl, CURLOPT_HEADER, false);<br>
cur_setopt($curl, CURLOPT_RETURNTRANSFER, true);<br>
curl_setopt($curl, CURLOPT_NOBODY, true);<br>
컬_setopt($curl, CURLOPT_POST, true);<br>
컬_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);<br>
$return_str = curl_exec($curl);<br>
컬_닫기($curl);<br>
$return_str;<br> 반환
}<br>
비공개 함수 postCurlTransfer($url, $data)<br>
{<br>
$curl = curl_init();<br>
컬_setopt($curl, CURLOPT_URL, $url);<br>
컬_setopt($curl, CURLOPT_RETURNTRANSFER, 1);<br>
컬_setopt($curl, CURLOPT_POST, 1);<br>
컬_setopt($curl, CURLOPT_POSTFIELDS, $data);<br> $str = 컬_exec($curl);<br>
컬_닫기($curl);<br>
<br>
$str 반환<br>
}<br>
//템플릿 메시지 보내기<br>
공개 함수 sendtpl($openid, $url, $template_id, $content, $topcolor="#FF0000")<br>
{<br>
$arr = 배열(<br>
'touser' => $openid,<br>
'템플릿_ID' => $template_id,<br>
'url' => $url,<br>
'topcolor' =>$topcolor,<br>
'데이터' =>$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>
}</pre>
위는 위챗 결제의 간단한 패키지입니다
결제를 시작하려면 먼저 WeChat 공식 계정의 정보와 일치하십시오.
WeChat 결제 디렉토리 포함
입니다
http://도메인 이름//index.php/Home/Index/
이런 것 같아요
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>
}
* PhpStorm이 만들었습니다.
* 사용자: sks<br>
* 날짜: 16/7/8<br>
* 시간: 下午3:54<br>
*/<br>
네임스페이스 HomeController;<br>
CommonControllerHomebaseController를 사용하세요.
클래스 WeixinController는 HomebaseController를 확장합니다.{
공개 함수 zhanshi(){
$weixin = 새로운 OrgWeixin;
$code = $_GET['코드'];
$state = $_GET['state'];
$url="";
$userinfo = $weixin->jingmo($url, $code, $state);
세션('userinfo',$userinfo);
if($code) {
헤더("위치: $state");
}그 외{
}
}
}공개 행사
function.phpfunction getuserinfo(){ //사용자 정보 가져오기
Import("weixin");
$weixin = 새로운 OrgWeixin;
$info = 세션('사용자 정보');
If($정보){
$정보 반환
죽다;
}그밖에 {
$state = 'http://' . $_SERVER['HTTP_HOST'] .
$code =
$url = 'http://' . $_SERVER['HTTP_HOST'] . U('홈/Weixin/zhanshi');
$url = urlencode($url);
$weixin->jingmo($url, $code, $state);
}
}테스트 결제<?php <🎜>
/**
*PhpStorm에서 제작했습니다.
* 사용자 : sks
* 일시 : 8/16/7* 시간 : 오후 3시 29분<br>
*/<br>
네임스페이스 HomeController;<br>
CommonControllerHomebaseController를 사용하세요.<br>
ThinkPage를 사용하세요.<br>
IndexController 클래스는 HomebaseController를 확장합니다.{<br>
<br>
//테스트 결제<br>
공개 함수 zhifu()<br>
{<br>
$userinfo = getuserinfo() //WeChat 사용자 정보 가져오기 및 공개 기능 호출<br>
$openid = $userinfo['openid'];<br>
$time = 시간();<br>
$title = "결제하고 싶어요";<br>
$out_trade_no = 날짜('Y',time()).$time.rand(1000,2000);<br>
$total_fee = 1;<br>
$notify_url = "http://도메인 이름/index.php/Home/Index/paynotify";//콜백 URL<br>
$weixin = 새로운 OrgWeixin;<br>
$result = $weixin->sendpay($openid, $title, $out_trade_no, $total_fee, $notify_url);<br>
$this->할당('결과',$결과);<br>
$this->display();<br>
}<br>
//결제 결과 알림입니다<br>
공개 함수 paynotify(){<br>
$weixin = 새로운 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 = "서명";<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 "성공";<br>
}<br>
<br>
공개 함수 getaccesstoken(){<br>
$weixin = 새로운 OrgWeixin;<br>
echo $weixin->getaccesstoken();<br>
<br>
}<br>
}

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기
