ThinkPHP 알 리 페 이 인터페이스 기능 인 스 턴 스 실현
최근 에 시스템 을 만 들 려 면 온라인 결제 기능 을 실현 해 야 합 니 다.주저 하지 않 고 알 리 페 이의 인터페이스 결제 기능 을 선 택 했 습 니 다.여기 서 저 는 즉시 입금 하 는 인 터 페 이 스 를 사 용 했 습 니 다.구체 적 으로 실현 하 는 절 차 는 다음 과 같 습 니 다.
1.알 리 페 이 인터페이스 팩 다운로드
다운로드 주소:https://b.alipay.com/order/productDetail.htm?productId=2012111200373124&tabId=4#ps-tabinfo-hash
구체 적 으로 다운로드 하 는 방법 에 대해 서 는 잔소리 하지 않 겠 습 니 다~
2.인터페이스 패키지 파일 을 다시 정리 하 는 것 은 비교적 관건 적 인 것 이 라 고 할 수 있 습 니 다.다운로드 한 인터페이스 패키지 파일 은 언어의 소스 코드 가 많 습 니 다.
우 리 는 createdirect_pay_by_user-PHP-UTF-8 이라는 이름 의 인터페이스 파일 에는 다음 과 같은 파일 이 포함 되 어 있 습 니 다.
images 파일 에는 알 리 페 이와 관련 된 표지 의 그림 입 니 다.우 리 는 그 를 잠시 상관 하지 않 습 니 다.lib 파일 은 매우 중요 하고 전체 인터페이스의 핵심 파일 입 니 다.
alipay.config.php 는 관련 매개 변수 설정 파일 입 니 다.
alipayapi.php 는 알 리 페 이 인터페이스 입구 파일 입 니 다.
notify_url.php 는 서버 비동기 알림 페이지 파일 입 니 다.
return_url.php 는 페이지 전환 동기 화 알림 파일 입 니 다.
ThinkpHP 의 프레임 워 크 파일 에서 Extended 를 찾 아 들 어가 서 Vendor 에 들 어 갑 니 다.Vendor 폴 더 에서 새 폴 더 Alipay 는 알 리 페 이 를 제3자 라 이브 러 리 로 도입 한 다음 에 알 리 페 이 인터페이스 파일 패키지 에 있 는 lib 파일 의 모든 파일 을 복사 합 니 다.모두 4 개의 파일 입 니 다.다음 과 같 습 니 다.
현재 위 파일 의 이름 을 바 꿉 니 다.
alipay_core.function.php 이름 바 꾸 기:Corefunction.php;
alipay_md5.function.php 이름 바 꾸 기:Md5function.php;
alipay_notify.class.php 이름 바 꾸 기:Notify.php;
alipay_submit.class.php 이름 바 꾸 기:Submit.php;
그리고 Submit.php 파일 을 열 고 다음 코드 를 제거 합 니 다.
require_once("alipay_core.function.php");
require_once("alipay_md5.function.php");마찬가지 로 Notify.php 파일 을 열 고 다음 두 단락 의 코드 를 require 제거 합 니 다.once("alipay_core.function.php");
require_once("alipay_md5.function.php");왜 상기 두 파일 중의 이 두 단락 의 코드 를 없 애 야 합 니까?프로젝트 에서 인터페이스 파일 을 호출 할 때,나 는 모든 네 개의 핵심 파일 을 vendor 를 통 해 도입 하기 때 문 입 니 다.그래서 더 이상 가 져 올 필요 가 없습니다.
이로써 알 리 페 이 인터페이스 패키지 와 관련 된 핵심 라 이브 러 리 의 정 리 는 기본적으로 끝났다.지금부터 프로젝트 에서 호출 하기;
3.프로젝트 에서 알 리 페 이 인터페이스 호출
호출 두 단계:
1.설정 파일 에서 Conf/Config.php 파일 에서 알 리 페 이 관련 매개 변 수 를 설정 합 니 다.
//
'alipay_config'=>array(
'partner' =>'20********50', // PID;
'key'=>'9t***********ie',// Key
'sign_type'=>strtoupper('MD5'),
'input_charset'=> strtolower('utf-8'),
'cacert'=> getcwd().'\\cacert.pem',
'transport'=> 'http',
),
// , alipay.config.php , ;
'alipay' =>array(
// ,
'seller_email'=>'[email protected]',
// url, Pay notifyurl ;
'notify_url'=>'http://www.xxx.com/Pay/notifyurl',
// url, Pay returnurl ;
'return_url'=>'http://www.xxx.com/Pay/returnurl',
// , User ,myorder , payed( )
'successpage'=>'User/myorder?ordtype=payed',
// , User ,myorder , unpay( )
'errorpage'=>'User/myorder?ordtype=unpay',
),
2,새 PayAction 컨트롤 러 코드 는 다음 과 같 습 니 다
class PayAction extends Action{
// ,
public function _initialize() {
vendor('Alipay.Corefunction');
vendor('Alipay.Md5function');
vendor('Alipay.Notify');
vendor('Alipay.Submit');
}
//doalipay
public function doalipay(){
// require_once("alipay.config.php");
// require_once("lib/alipay_submit.class.php");
// TP C , $alipay_config;
$alipay_config=C('alipay_config');
$payment_type = "1"; // // ,
$notify_url = C('alipay.notify_url'); //
$return_url = C('alipay.return_url'); //
$seller_email = C('alipay.seller_email');//
$out_trade_no = $_POST['trade_no'];// , !
$subject = $_POST['ordsubject']; // //
$total_fee = $_POST['ordtotal_fee']; // //
$body = $_POST['ordbody']; //
$show_url = $_POST['ordshow_url']; //
$anti_phishing_key = "";// // submit query_timestamp
$exter_invoke_ip = get_client_ip(); // IP
// ,
$parameter = array(
"service" => "create_direct_pay_by_user",
"partner" => trim($alipay_config['partner']),
"payment_type" => $payment_type,
"notify_url" => $notify_url,
"return_url" => $return_url,
"seller_email" => $seller_email,
"out_trade_no" => $out_trade_no,
"subject" => $subject,
"total_fee" => $total_fee,
"body" => $body,
"show_url" => $show_url,
"anti_phishing_key" => $anti_phishing_key,
"exter_invoke_ip" => $exter_invoke_ip,
"_input_charset" => trim(strtolower($alipay_config['input_charset']))
);
//
$alipaySubmit = new AlipaySubmit($alipay_config);
$html_text = $alipaySubmit->buildRequestForm($parameter,"post", " ");
echo $html_text;
}
function notifyurl(){
//require_once("alipay.config.php");
//require_once("lib/alipay_notify.class.php");
// C , $alipay_config
$alipay_config=C('alipay_config');
//
$alipayNotify = new AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyNotify();
if($verify_result) {
//
// ,
$out_trade_no = $_POST['out_trade_no']; //
$trade_no = $_POST['trade_no']; //
$trade_status = $_POST['trade_status']; //
$total_fee = $_POST['total_fee']; //
$notify_id = $_POST['notify_id']; // ID。
$notify_time = $_POST['notify_time']; // 。 yyyy-MM-dd HH:mm:ss。
$buyer_email = $_POST['buyer_email']; // ;
$parameter = array(
"out_trade_no" => $out_trade_no, // ;
"trade_no" => $trade_no, // ;
"total_fee" => $total_fee, // ;
"trade_status" => $trade_status, //
"notify_id" => $notify_id, // ID。
"notify_time" => $notify_time, // 。
"buyer_email" => $buyer_email, // ;
);
if($_POST['trade_status'] == 'TRADE_FINISHED') {
//
}else if ($_POST['trade_status'] == 'TRADE_SUCCESS') { if(!checkorderstatus($out_trade_no)){
orderhandle($parameter);
// , ;
}
}
echo "success"; //
}else {
//
echo "fail";
}
}
function returnurl(){
// , !
$alipay_config=C('alipay_config');
$alipayNotify = new AlipayNotify($alipay_config);//
$verify_result = $alipayNotify->verifyReturn();
if($verify_result) {
//
// ,
$out_trade_no = $_GET['out_trade_no']; //
$trade_no = $_GET['trade_no']; //
$trade_status = $_GET['trade_status']; //
$total_fee = $_GET['total_fee']; //
$notify_id = $_GET['notify_id']; // ID。
$notify_time = $_GET['notify_time']; // 。
$buyer_email = $_GET['buyer_email']; // ;
$parameter = array(
"out_trade_no" => $out_trade_no, // ;
"trade_no" => $trade_no, // ;
"total_fee" => $total_fee, // ;
"trade_status" => $trade_status, //
"notify_id" => $notify_id, // ID。
"notify_time" => $notify_time, // 。
"buyer_email" => $buyer_email, //
);
if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {
if(!checkorderstatus($out_trade_no)){
orderhandle($parameter); // , ;
}
$this->redirect(C('alipay.successpage'));// ;
}else {
echo "trade_status=".$_GET['trade_status'];
$this->redirect(C('alipay.errorpage'));// ;
}
}else {
//
// , alipay_notify.php verifyReturn
echo " !";
}
}
}
?>
3.여기 결제 처리 과정 에서 필요 한 함수 가 몇 개 있 습 니 다.저 는 이 함수 들 을 프로젝트 의 Common/common.php 에 썼 습 니 다.이렇게 수 동 으로 호출 하지 않 아 도 이 함수 들 을 직접 사용 할 수 있 습 니 다.코드 는 다음 과 같 습 니 다.//Orderlist , ;
//
// : ;
// : , true, false;
function checkorderstatus($ordid){
$Ord=M('Orderlist');
$ordstatus=$Ord->where('ordid='.$ordid)->getField('ordstatus');
if($ordstatus==1){
return true;
}else{
return false;
}
}
//
// ,
function orderhandle($parameter){
$ordid=$parameter['out_trade_no'];
$data['payment_trade_no'] =$parameter['trade_no'];
$data['payment_trade_status'] =$parameter['trade_status'];
$data['payment_notify_id'] =$parameter['notify_id'];
$data['payment_notify_time'] =$parameter['notify_time'];
$data['payment_buyer_email'] =$parameter['buyer_email'];
$data['ordstatus'] =1;
$Ord=M('Orderlist');
$Ord->where('ordid='.$ordid)->save($data);
}
// ;
function getordcode(){
$Ord=M('Orderlist');
$numbers = range (10,99);
shuffle ($numbers);
$code=array_slice($numbers,0,4);
$ordcode=$code[0].$code[1].$code[2].$code[3];
$oldcode=$Ord->where("ordcode='".$ordcode."'")->getField('ordcode');
if($oldcode){
getordcode();
}else{
return $ordcode;
}
}
4.몇 가 지 를 정리 합 니까?1.인터페이스 패키지 에 있 는 lib 파일 의 파일 을 Vendor 에 복사 한 후에 TP 규범 의 명명 규칙 으로 이름 을 바 꾸 는 것 은 호출 이 편리 하기 위해 서 입 니 다.물론 다른 이름 으로 바 꾸 셔 도 됩 니 다.
2.결제 작업(doalipay)을 수행 하고 비동기 반환 결과(notifyurl)를 처리 하 며 점프 반환 결과(returnurl)세 개의 결제 인터페이스의 핵심 페이지 를 하나의 PayAction 컨트롤 러 에 기록 합 니 다.
3.결 제 를 제출 하 는 페이지 에서 제출 하기 전에 일부 매개 변 수 를 전달 할 내용 을 먼저 도 메 인 을 숨 기 는 방법 으로 조합 할 수 있 습 니 다.예 를 들 어 금액 을 먼저 계산 하고 주문 이름,주문 설명 등 은 먼저 문자열 로 조합 할 수 있 습 니 다.그리고 양식 을 제출 하면 doalipay 방법 에서 전달 파 라 메 터 를 직접 구성 하여 제출 하면 됩 니 다.
4.지불 반환 후의 처 리 는 비동기 와 점프 두 가지 방법 에서 모두 해당 하 는 판단 과 처 리 를 해 야 하기 때문에 이러한 판단 과 처 리 를 사용자 정의 함수 에 기록 하면 함 수 를 호출 하면 코드 가 더욱 명확 해 집 니 다.
5、notify_url 과 returnurl 두 가지 모드 의 반환 url 을 사용 해 야 합 니 다.http://xxxxxxx이러한 절대적 인 경 로 는 알 리 페 이 플랫폼 에서 프로젝트 페이지 로 돌아 가 는 것 이기 때문에 상대 적 인 경 로 를 사용 할 수 없습니다.
상기 코드 는 ThinkpHP 3.0 에서 정상적으로 사 용 됩 니 다!!
thinkpHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.과 을 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 ThinkPHP 프레임 워 크 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ThinkPHP5 일반 데이터 작업1. 데이터베이스는:thinkphp5, 새 데이터 테이블think_test 2.\application\database.php에서 수정 3.\application\index\model 다음에 새 모델 파일 테스트.ph...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.