드림위버를 이용해 여행 웹사이트를 구축했는데, 고객이 텐페이를 통해 결제를 해달라고 하더군요. 온라인으로 검색해보니 사고 싶거나 돈이 필요해서 직접 작성하게 됐어요.
코드:
if(!definated('DEDEINC')) exit('요청 오류!');
/**
*텐페이 인터페이스 강좌
*/
클래스 텐페이
{
var $dsql;
var $mid;
var $reqURL_onLine = "http://www.tenpay.com";
var $return_url='/plus/carbuyaction.php?dopost=return'; //返回处理地址
/**
* 생성자
*
* @접속공개
* @param
*
* @return 무효
*/
함수 텐페이()
{
글로벌 $dsql;
$this->dsql = $dsql;
}
함수 __construct()
{
$this->tenpay();
}
/**
* * 인터페이스를 설정하면 주소가 전송됩니다
*
* 예: $this->SetReturnUrl($cfg_basehost."/tuangou/control/index.php?ac=pay&orderid=".$p2_Order)
*
* @param string $returnurl이 주소를 보내드립니다
* @return 무효
*/
함수 SetReturnUrl($returnurl='')
{
if (!empty($returnurl))
{
$this->return_url = $returnurl;
}
}
/**
* 결제 코드 생성
* @param array $order 주문정보
* @param array $결제 결제수단 정보
*/
함수 GetCode($주문, $결제)
{
전역 $cfg_basehost,$cfg_cmspath;
//对于이종级目录의 조직
if(!empty($cfg_cmspath)) $cfg_basehost = $cfg_basehost.'/'.$cfg_cmspath;
$partner = $결제['tenpay_account'];
$out_trade_no = $order['out_trade_no'];
$total_fee = floatval($order['price']) * 100;
$body = $order['out_trade_no'];
$attach = '';
$bank_type = 'DEFAULT';
/* 交易类型:2、虚拟交易,1、实物交易 */
$trans_type = 1;
$trade_mode=empty($결제['tenpay_pay_method']) ? '1' : $결제['tenpay_pay_method'];
$매개변수 = 배열(
'파트너' => $파트너
'out_trade_no' => $out_trade_no, //订单号
'total_fee' => $total_fee, //总金额
'notify_url' => $cfg_basehost.$this->return_url."&code=".$결제['code'], //返回地址
'반환_URL' '반환_URL' => '본체' '본체' => 'Bank_type' = & GT; $ Bank_type, // 거래 유형 기본 Tenpay
//사용자 IP
'Spborne_create_ip' = & gt; $ _Server ['remote_addr'], // IP 거래
'fee_type' 'fee_type' => '1', 'fee_type' //통화 1위안
'주제' '주제' => //시스템 선택적 매개변수
'sign_type' 'sign_type' => 'MD5', 'sign_type' //암호화 방법
'Service_version' = & gt; '1.0', // 인터페이스 버전 번호 기본값은 1.0
'Input_charset' = & gt; 'UTF-8', // 시스템 인코딩 'gbk'
'Sign_key_index' = & gt; '1', // 키 일련번호
//비즈니스 선택적 매개변수
'Attach' = & gt; $ Attach, // 원본 데이터는 기본값을 공백으로 반환합니다.
'Product_fee' = & gt; '', // 상품 비용
'Transport_fee' = & gt; '0', // 물류비
'Time_start' = & gt; 날짜("ymdhis"), // 주문 생성 시간 날짜("ymdhis")
'Time_expire' = & gt; '', // 주문 실패 시간
'buyer_id' => '', //买方财付通帐号
'goods_tag' => '', //商品标记
'trade_mode' => $trade_mode, //交易模式(1.即时到帐模式,2.中介担保模式,3.后台选择(卖家进入支付中心列表选择))
'transport_desc' => '', //物流说明
'trans_type' => $trans_type, //交易类型
'agentid' => '', //平台ID
'agent_type' => '', //代理模式(0.无代理,1.表示卡易售模式,2.表示网店模式)
'seller_id' => '' //卖家商户号
);
ksort($parameter);
reset($parameter);
$param = '';
$sign = '';
foreach ($parameter AS $key => $val)
{
$param .= "$key=" .urlencode($val). "&";
if("" != $val && "sign" != $key) {
$sign .= "$key=$val&";
}
}
$param = substr($param, 0, -1);
$sign .= "key=".$payment['tenpay_key'];
$sign = strtolower(md5($sign));
$button = '
$버튼 반환;
/* 장바구니 지우기 */
require_once DEDEINC.'/shopcar.class.php';
$cart = 새로운 MemberShops();
$cart->clearItem();
$cart->MakeOrders();
$버튼 반환;
}
/**
*대응작전
*/
함수 응답()
{
/*구성 파일 소개 */
$code = preg_replace( "#[^0-9a-z-]#i", "", $_GET['code'] );
require_once DEDEDATA.'/결제/'.$code.'.php';
$attach = $_GET['attach'];
$trade_state $total_fee = $_GET['total_fee'];
$out_trade_no = Trim($_GET['out_trade_no']);
if(preg_match ("/S-P[0-9] RN[0-9]/",$order_sn)) {
//결제 금액이 일치하는지 확인
$row = $this->dsql->GetOne("SELECT * FROM
#@__shops_orders WHERE oid = '{$order_sn}'"); If ($row['priceCount'] != $_GET['total_fee'])
{
return $msg = "결제 실패, 결제 금액이 전체 상품 가격과 일치하지 않습니다!";
}
$this->mid = $row['userid'];
/* 디지털 서명이 올바른지 확인하세요 */
ksort($_GET);
재설정($_GET);
$sign = '';
foreach($_GET AS $key => $val)
{
If("" != $val && "sign" != $key && $key != '코드') {
$sign .= "$key=$val&";
}
}
$sign .= "key=".$결제['tenpay_key'];
if(strtolower(md5($sign))==strtolower($_GET['sign']))
{
if($trade_state==0)
~ > > > If($this->success_db($out_trade_no))
return $msg = "결제 성공!
홈페이지로 돌아가기 회원 센터";
else return $msg = "결제 실패!
홈페이지로 돌아가기 회원 센터"; 🎜> ~ }
그렇지 않으면{
//return $msg = "결제 실패!
홈페이지로 돌아가기 회원 센터" ;
}
}
/*아이템 거래 처리 중*/
함수 성공_db($order_sn)
{
$time=time();
$mid=$this->mid;
//주문 정보를 얻고 주문의 유효성을 확인합니다
$row = $this->dsql->GetOne("SELECT state,priceCount FROM #@__shops_orders WHERE oid='$order_sn' ");
If($row['state'] > 0)
{
TRUE를 반환합니다.
~ /* 주문 상태 변경_결제 성공 */
$sql = "업데이트
`#@__shops_orders` SET `state`='1' WHERE `oid`='$order_sn' AND `userid`='".$this->mid."' "; If($this->dsql->ExecuteNoneQuery($sql))
{
$this->log_result("verify_success, 주문 번호: ".$order_sn) //확인 결과를 파일에 저장
TRUE를 반환합니다.
} else {
$this->log_result ("verify_failed, 주문 번호: ".$order_sn);//확인 결과를 파일에 저장
FALSE를 반환합니다.
}
}
함수 log_result($word) {
전역 $cfg_cmspath;
$fp = fopen(dirname(__FILE__)."/../../data/paid/log.txt","a");
무리($fp, LOCK_EX) ;
fwrite($fp,$word.",실행 날짜:".strftime("%Y-%m-%d %H:%I:%S",time())."rn");
무리($fp, LOCK_UN);
fclose($fp);
}
}

TomakePhPapplicationSfaster, followthesesteps : 1) useopCodeCaching likeOpcachetOrpectipiledScriptBecode.2) MinimizedAtabaseQueriesByUsingQueryCachingandEfficientIndexing.3) leveragephp7 assistorBetterCodeeficiession.4) 구현 전략적 지시

toImprovePhPapplicationSpeed, followthesesteps : 1) enableOpCodeCachingWithApcuTeCeScripteXecutionTime.2) 구현 구현

의존성 주입 (DI)은 명시 적으로 전이적 종속성에 의해 PHP 코드의 테스트 가능성을 크게 향상시킵니다. 1) DI 디퍼 커플 링 클래스 및 특정 구현은 테스트 및 유지 보수를보다 유연하게 만듭니다. 2) 세 가지 유형 중에서, 생성자는 상태를 일관성있게 유지하기 위해 명시 적 표현 의존성을 주입합니다. 3) DI 컨테이너를 사용하여 복잡한 종속성을 관리하여 코드 품질 및 개발 효율성을 향상시킵니다.

DatabaseQuesyOptimizationInphPinVolvesVesstoigiestoInsperferferferferformance.1) SelectOnlyNecessaryColumnstoredAtatatransfer.2) useinDexingTeSpeedUpdatarretieval.3) ubstractOrerEresultSoffRequeries.4) UtilizePreDstatements Offeffi

phpisusedforendingemailsduetoitsbuitsbuitsbuit-inmail () functionandsupportivelibraries lifephpmailerandswiftmailer.1) usethemail () functionforbasicemails, butithaslimitations.2) EmployPhpmailerforAdvancedFeatirehtMailsAndAtachments.3))

PHP 성능 병목 현상은 다음 단계를 통해 해결할 수 있습니다. 1) 성능 분석을 위해 Xdebug 또는 Blackfire를 사용하여 문제를 찾으십시오. 2) 데이터베이스 쿼리 최적화 및 APCU와 같은 캐시 사용; 3) Array_Filter와 같은 효율적인 기능을 사용하여 배열 작업을 최적화합니다. 4) 바이트 코드 캐시에 대한 OpCache 구성; 5) HTTP 요청을 줄이고 사진 최적화와 같은 프론트 엔드 최적화; 6) 지속적으로 모니터링하고 성능을 최적화합니다. 이러한 방법을 통해 PHP 응용 프로그램의 성능을 크게 향상시킬 수 있습니다.

종속성 주사 (di) inphpisadesignpattern thatmanages 및 enpleducesclassdelencies, 향상 codemodularity, trestability 및 maintainability .itallowspassingDepporsingDikedAbaseConnectionStoclassesAssparameters, 촉진 이용성.

cachingimprovesphpperferferfermanceStoringResultsOfcomputationSorqueriesforquickRetrieval, retingServerloadandenhancancing responsetimestimes : 1) opcodecaching, opcodecaching, whitescompiledphps scriptsinmorytoskipcompileation; 2) dataCachingUsingmemmc


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

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

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

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

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