首页
导航
博客
电子书
算法
众创
代码
随贴
关于我们
您好,欢迎来到码863代码分享网! 请
[登录]
/
[注册]
搜 索
一句话概述代码的用途:
*
(例: 使用js控制复制及输入数据时只能是数字)
120
字
代码类型:
无
函数
类
插件
单段代码直接可运行
TAG标签:
(用空格隔开)
30
字
描述说明:
请填写代码的实现原理、应用场景、功能说明、调用示例、注意事项等。
代码正文:
*
请选择语言
html
python
javascript
php
sql
c
c++
c#
java
plain
简单说明:
排序:
测试一下
location.href="/";'); //保存order_id 供对比 $_SESSION['order_id']= $row['oid']; //设置支付失败返回链 可以直接alert('支付失败,请稍后重新提交!')下回首页 $_SESSION['back_url']="$url/paypal.php?act=pay_fail&oid=".$row['oid']; //跳转到paypal填写相关信息后,返回本站链接 与取消付款后链接 $return_url=urlencode($url."/paypal.php?act=return_url¤cyCodeType=".$currency.'&paymentType='.$paymentType.'&out_trade_no='.$row['oid']); $cancel_url=urlencode($_SESSION['back_url']); $order=array('oid'=>$row['oid'],'shipping_fee'=>0,'goods_amount'=>$row['price'],'order_amount'=>$row['price']); $order_goods_list=array(); $order_goods_list[]=array('id'=>1,'goods_name'=>'targetessay.com线上订购,订单号:'.$row['oid'],'spec_info'=>"",'goods_price'=>$row['price'],'goods_num'=>1); //print_r($order);print_r($order_goods_list);exit; $payment=new paypal(); $jump_url=$payment->get_payurl($return_url,$cancel_url,$order,$order_goods_list,$currency,$paymentType); //var_dump($jump_url);exit; if(!$jump_url){ die('');} header('location:'.$jump_url); } //返回本站检查,继续支付 elseif($_REQUEST['act']=='return_url') { //订单号 $_REQUEST['out_trade_no']=intval($_REQUEST['out_trade_no']); //令牌 $token=urlencode( $_REQUEST['token']); $payment=new paypal(); $rows=$payment->GetExpressCheckoutDetails($token); $query= "select * from {$pre}ordering where id = '$_REQUEST[out_trade_no]'"; $res = mysql_query($query, $conn) or die(mysql_error()); $order=mysql_fetch_array($res); $order['oid'] =$order['id']; if($payment->return_verify($rows,$order['oid'])){//正在处理的order_id应该用session保存 要与paypal回传来的一至 die(''); } //与库内对比过订单号与金额(准确说是session保存的),确定支付 if($payment->DoExpressCheckoutPayment($rows)){ $time=date('Y-m-d H:i:s'); $query = "update {$pre}ordering set pay_time='$time' ,status=99 where id = '$_REQUEST[out_trade_no]'"; $res = mysql_query($query, $conn) or die(mysql_error()); //跳转到支付成功页面。 $header=$url.'/paypal.php?act=pay_success&oid='.$_REQUEST[out_trade_no]; }else{ $header=$url.'/paypal.php?act=pay_fail&oid='.$_REQUEST[out_trade_no]; } header('location:'.$header); } elseif($_REQUEST['act']=='pay_fail'){ show_message('支付失败,是否重新提交支付?', array('重新提交支付'=>'./paypal.php?act=go_paypal&oid='.$_REQUEST['oid'],'返回首页'=>'/'),0,0); //die('支付失败,请稍后重新提交!');//支付失败,重新支付! } elseif($_REQUEST['act']=='pay_success'){ show_message('已成功完成支付!', array('返回首页'=>'/'),0,0); } class paypal{ /** * 通过SetExpressCheckout获取token后返回登陆url * 成功返回url 失败false * @param * @return string or false */ public function get_payurl($return_url,$cancel_url,$order,$order_goods_list,$currencyCodeType='USD',$paymentType='Sale'){ //生成商品nvpstr $goods_str=''; foreach($order_goods_list as $k=>$v){ $goods_str.="&L_NAME{$k}=".urlencode($v['goods_name'])."&L_DESC{$k}=".urlencode($v['spec_info'])."&L_AMT{$k}=$v[goods_price]&L_QTY{$k}=$v[goods_num]&L_NUMBER{$k}=$v[id]"; } $shippingamt=$order['shipping_fee']; $itemamt=$order['goods_amount']; $amt = $order['order_amount']; $nvpstr=""; //地址 $nvpstr=$goods_str."&SHIPPINGAMT=$shippingamt&ITEMAMT=$itemamt&AMT=".(string)$amt."&ReturnUrl=".$return_url."&CANCELURL=".$cancel_url."&CURRENCYCODE=".$currencyCodeType."&PAYMENTACTION=".$paymentType."&NOSHIPPING=1&SOLUTIONTYPE=Sole"; $resArray=hash_call("SetExpressCheckout",$nvpstr); //$_SESSION['reshash']=$resArray; $ack = strtoupper($resArray["ACK"]); if($ack=="SUCCESS"){ $_SESSION['currencyCodeType']= $currencyCodeType; $_SESSION['order_amount']= $amt; $token = urldecode($resArray["TOKEN"]); return PAYPAL_URL.$token; } else { return false; } } /** http://hotel.com/paypal.php?act=return_url¤cyCodeType=USD&paymentType=Sale&out_trade_no=25&token=EC-57M56168CR915981H&PayerID=A9QCQR8NSMM7J * 从paypal返回GetExpressCheckoutDetails订单详情 * 成功返回array 失败false * @param * @return string or false */ public function GetExpressCheckoutDetails($token){ $nvpstr="&TOKEN=".$token; // $nvpstr = $nvpHeader.$nvpstr; $resArray=hash_call("GetExpressCheckoutDetails",$nvpstr); //$_SESSION['reshash']=$resArray; $ack = strtoupper($resArray["ACK"]); if($ack == 'SUCCESS' || $ack == 'SUCCESSWITHWARNING'){ return $resArray; } else { return false; } } /** * 校验从paypal返回GetExpressCheckoutDetails订单详情 从paypal返回总金额与货币类型要与session保存的一致 * 成功返回array 失败false * @param $rows 从paypal返回GetExpressCheckoutDetails订单详情 * @param $order_id 正处理的订单id * @return string or false */ public function return_verify($rows,$order_id){ $AMT = intval(ceil(($rows['AMT']+$rows['SHIPDISCAMT'])*100)); $order_amount = intval(ceil($_SESSION['order_amount']*100)); if ( $order_amount != $AMT || $ $_SESSION['order_id'] != $order_id || trim($_SESSION['currencyCodeType']) !=trim($rows['CURRENCYCODE'])){//判断总价及币种 return false; } return true; } //支付 public function DoExpressCheckoutPayment($rows){ $token =urlencode( $_REQUEST['token']); $paymentAmount =urlencode($rows['AMT'] + $rows['SHIPDISCAMT']); $paymentType = urlencode($_REQUEST['paymentType']); $currCodeType = urlencode($_REQUEST['currencyCodeType']); $payerID = urlencode($_REQUEST['PayerID']); $serverName = urlencode($_SERVER['SERVER_NAME']); $nvpstr='&TOKEN='.$token.'&PAYERID='.$payerID.'&PAYMENTACTION='.$paymentType.'&AMT='.$paymentAmount.'&CURRENCYCODE='.$currCodeType.'&IPADDRESS='.$serverName ; $resArray=hash_call("DoExpressCheckoutPayment",$nvpstr); $ack = strtoupper($resArray["ACK"]); if($ack != 'SUCCESS' && $ack != 'SUCCESSWITHWARNING'){ return false; } return true; } } /* * 支付用到的函数 * paypal官方写 */ //CallerService.php function nvpHeader($AUTH_token='',$AUTH_signature='',$AUTH_timestamp='') { //global $API_Endpoint,$version,$API_UserName,$API_Password,$API_Signature,$nvp_Header, $subject, $AUTH_token,$AUTH_signature,$AUTH_timestamp; $nvpHeaderStr = ""; if(defined('AUTH_MODE')) { $AuthMode = "AUTH_MODE"; } else { $API_UserName= API_USERNAME;$API_Password= API_PASSWORD;$API_Signature= API_SIGNATURE;$subject= SUBJECT; if((!empty($API_UserName)) && (!empty($API_Password)) && (!empty($API_Signature)) && (!empty($subject))) { $AuthMode = "THIRDPARTY"; } else if((!empty($API_UserName)) && (!empty($API_Password)) && (!empty($API_Signature))) { $AuthMode = "3TOKEN"; } elseif (!empty($AUTH_token) && !empty($AUTH_signature) && !empty($AUTH_timestamp)) { $AuthMode = "PERMISSION"; } elseif(!empty($subject)) { $AuthMode = "FIRSTPARTY"; } } switch($AuthMode) { case "3TOKEN" : $nvpHeaderStr = "&PWD=".urlencode(API_PASSWORD)."&USER=".urlencode(API_USERNAME)."&SIGNATURE=".urlencode(API_SIGNATURE); break; case "FIRSTPARTY" : $nvpHeaderStr = "&SUBJECT=".urlencode(SUBJECT); break; case "THIRDPARTY" : $nvpHeaderStr = "&PWD=".urlencode(API_PASSWORD)."&USER=".urlencode(API_USERNAME)."&SIGNATURE=".urlencode(API_SIGNATURE)."&SUBJECT=".urlencode(SUBJECT); break; case "PERMISSION" : $nvpHeaderStr = formAutorization($AUTH_token,$AUTH_signature,$AUTH_timestamp); break; } return $nvpHeaderStr; } function hash_call($methodName,$nvpStr,$AUTH_token='',$AUTH_signature='',$AUTH_timestamp='') { $nvpheader=nvpHeader($AUTH_token,$AUTH_signature,$AUTH_timestamp); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,API_ENDPOINT); curl_setopt($ch, CURLOPT_VERBOSE, 1); //turning off the server and peer verification(TrustManager Concept). curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_POST, 1); //in case of permission APIs send headers as HTTPheders if(!empty($AUTH_token) && !empty($AUTH_signature) && !empty($AUTH_timestamp)) { $headers_array[] = "X-PP-AUTHORIZATION: ".$nvpheader; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers_array); curl_setopt($ch, CURLOPT_HEADER, false); } else { $nvpStr=$nvpheader.$nvpStr; } if(USE_PROXY) curl_setopt ($ch, CURLOPT_PROXY, PROXY_HOST.":".PROXY_PORT); if(strlen(str_replace('VERSION=', '', strtoupper($nvpStr))) == strlen($nvpStr)) { $nvpStr = "&VERSION=" . urlencode(VERSION) . $nvpStr; } $nvpreq="METHOD=".urlencode($methodName).$nvpStr; curl_setopt($ch,CURLOPT_POSTFIELDS,$nvpreq); $response = curl_exec($ch); $nvpResArray=deformatNVP($response); $nvpReqArray=deformatNVP($nvpreq); $_SESSION['nvpReqArray']=$nvpReqArray; if (curl_errno($ch)) { return false; } else { //closing the curl curl_close($ch); } return $nvpResArray; } function deformatNVP($nvpstr) { $intial=0; $nvpArray = array(); while(strlen($nvpstr)){ $keypos= strpos($nvpstr,'='); $valuepos = strpos($nvpstr,'&') ? strpos($nvpstr,'&'): strlen($nvpstr); $keyval=substr($nvpstr,$intial,$keypos); $valval=substr($nvpstr,$keypos+1,$valuepos-$keypos-1); $nvpArray[urldecode($keyval)] =urldecode( $valval); $nvpstr=substr($nvpstr,$valuepos+1,strlen($nvpstr)); } return $nvpArray; } function formAutorization($auth_token,$auth_signature,$auth_timestamp) { $authString="token=".$auth_token.",signature=".$auth_signature.",timestamp=".$auth_timestamp ; return $authString; } /* * 自己定义的 * */ /** * 获得当前环境的 HTTP 协议方式 * @access public * @return void */ function http() { static $http=null; if($http!==null) { return $http; } return $http=(isset($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')) ? 'https://' : 'http://'; } /** * 取得当前的域名 完整 协议 +域名/ip+端口 https://www.jetee.cn:8080 * * @access public * * @return string 当前的域名 */ function get_domain() { static $get_domain=null; if($get_domain!==null) { return $get_domain; } /* 协议 */ $protocol = http(); /* 域名或IP地址 */ if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])){ $host = $_SERVER['HTTP_X_FORWARDED_HOST']; }elseif (isset($_SERVER['HTTP_HOST'])){ $host = $_SERVER['HTTP_HOST']; }else{ /* 端口 */ if (isset($_SERVER['SERVER_PORT'])) { $port = ':' . $_SERVER['SERVER_PORT']; if ((':80' == $port && 'http://' == $protocol) || (':443' == $port && 'https://' == $protocol)){ $port = ''; } }else{ $port = ''; } if (isset($_SERVER['SERVER_NAME'])) { $host = $_SERVER['SERVER_NAME'] . $port; }elseif (isset($_SERVER['SERVER_ADDR'])){ $host = $_SERVER['SERVER_ADDR'] . $port; } } return $get_domain=$protocol . $host; } /** * 加反斜线 * @access public * @param mix $string * @return mix */ function daddslashes($string) { if(is_array($string)) { foreach($string as $key => $val) { unset($string[$key]); $string[addslashes($key)] = daddslashes($val); } } else { $string = addslashes($string); } return $string; } /** * 显示一个提示信息 独立函数 * * @access public * @param string $content * @param array links 跳转链接 可选填 array('首页'=>'index.php') * @param string $type 消息類型, 0消息,1錯誤,2詢問 * @param string $auto_redirect 是否自动跳转 * @return void * $Id: index.php 11:26 2015/5/10 @version 0.0.2 */ function show_message($content, $links = array(), $type =0, $auto_redirect = true){ $charset='UTF-8';//$cfg $msg['content'] = $content; if (count($links) == 0){ $msg['url_info']['返回上一页'] = 'javascript:history.back()'; $msg['back_url'] = 'javascript:history.back()'; }else{ $i=0; foreach($links as $text =>$url){ $msg['url_info'][$text] = $url; $i++==0 ? $msg['back_url'] = $url :''; } } $msg['type'] = $type; ?>
检测消息
检测消息
$url ){?>
《
CopyRight 2002~2023 精通2100网 联系邮箱:qqtxt@163.com
版权所有:精通2100网
湘ICP备2023018646号-1
MYSQl共执行 4 个查询,用时 0.0019831657409668 秒,PHP脚本用时 0.004362 秒,占用内存 0.547 MB,Gzip 已启用