首页
导航
博客
电子书
算法
众创
代码
随贴
关于我们
您好,欢迎来到码863代码分享网! 请
[登录]
/
[注册]
搜 索
paypal支付实例httptargetessay.com,注释丰富
编辑
代码正文
双击正文可选择全部
1[代码][php]
尝试一下
<?php /* 要配置的 */ //指定收款货币 define('API_USERNAME', 'qqtxt-facilitator_api1.163.com');//paypal后台找 不是paypal登陆帐号密码 define('API_PASSWORD', '1389083324'); define('API_SIGNATURE', 'A64CYaekJZ6cl4R7TtDmp3zbUiIoAvdxKyxtRJQ.RgA4wJcxuk67bWn1');//paypal后台找 不是paypal登陆帐号密码 /* 要配置的 */ define('CURRENCY', 'GBP'); //指定Live https://api-3t.paypal.com/nvp 还是Sandbox https://api-3t.sandbox.paypal.com/nvp #define('API_ENDPOINT', 'https://api-3t.sandbox.paypal.com/nvp'); define('API_ENDPOINT', 'https://api-3t.paypal.com/nvp'); //指定Live https://www.paypal.com/webscr&cmd=_express-checkout&token= 还是Sandbox https://www.sandbox.paypal.com/webscr&cmd=_express-checkout&token= #define('PAYPAL_URL', 'https://www.sandbox.paypal.com/webscr&cmd=_express-checkout&token='); define('PAYPAL_URL', 'https://www.paypal.com/webscr&cmd=_express-checkout&token='); $configInc = require './caches/configs/database.php'; $timezone = require './caches/configs/system.php'; $hostname = $configInc['default']['hostname']; //主机名,可以用IP代替 $database = $configInc['default']['database']; //数据库名 $username = $configInc['default']['username']; //数据库用户名 $password = $configInc['default']['password']; //数据库密码 $pre=$configInc['default']['tablepre']; $conn = mysql_connect($hostname, $username, $password) or trigger_error(mysql_error(),E_USER_ERROR); mysql_query('set names "utf8"'); mysql_select_db($database, $conn); $db = @mysql_select_db($database, $conn) or die(mysql_error()); session_start(); header("Content-type:text/html;charset=utf-8"); @date_default_timezone_set($timezone['timezone']); (PHP_VERSION < '5.3.0') ? set_magic_quotes_runtime(0) : ''; if(!MAGIC_QUOTES_GPC) { $_GET = daddslashes($_GET); $_POST = daddslashes($_POST); } define('SUBJECT',''); define('USE_PROXY',FALSE); define('PROXY_HOST', '127.0.0.1'); define('PROXY_PORT', '808'); define('VERSION', '65.1'); define('ACK_SUCCESS', 'SUCCESS'); define('ACK_SUCCESS_WITH_WARNING', 'SUCCESSWITHWARNING'); $url=get_domain(); //生成支付paypal链接跳转到paypal填写相关信息 if($_REQUEST['act']=='go_paypal'){ $paymentType='Sale'; $oid= isset($_REQUEST['oid']) ? intval($_REQUEST['oid']) : 0 ; $currency=CURRENCY;//strip_tags($_GET['currency']); $query= "select * from {$pre}ordering where id = '$oid'"; $res = mysql_query($query, $conn) or die(mysql_error()); $row=mysql_fetch_array($res); $row['oid'] =$row['id']; //检查是否已付款 if(empty($row['oid']) || !empty($row['pay_time'])) die('<script>location.href="/";</script>'); //保存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('<script>alert("Payment failure, please try again!");location.href="'.$_SESSION['back_url'].'";</script>');} 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('<script>alert("支付校验失败,请重新操作!");location.href="'.$_SESSION['back_url'].'";</script>'); } //与库内对比过订单号与金额(准确说是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; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"> <meta http-equiv="Content-Type" content="text/html; charset=<?php echo $charset; ?>" /> <title>检测消息</title> <?php if($auto_redirect){?> <meta id="stop" http-equiv="refresh" content="2;URL=<?php echo $msg['back_url']; ?>" /> <?php } ?> <style> body{margin:0;} a { text-decoration: none; color: #069; } a:hover { color: #F60; } .clear { clear: both; } #message { text-align: center; width: 800px; font-family: "微软雅黑", Verdana, sans-serif, "宋体"; margin-right: auto; margin-left: auto; margin-top: 80px; line-height: 1.8; font-weight: bold; } .wait { color: #096; } .error { color: #C00; font-size: 24px; } #message_txt { width: 800px; } #public_service { margin-top: 150px; } #error_head { height: 70px; background-color: #09C; } img { margin-top: 10px; margin-bottom: 10px; } #error_head .title { line-height: 70px; height: 70px; width: 800px; margin-right: auto; margin-left: auto; } #error_head .title .err { font-family: "微软雅黑", Verdana, sans-serif, "宋体"; font-weight: bold; color: #FFF; font-size: 36px; } #error_head .title .home { margin-left: 30px; font-family: "微软雅黑", Verdana, sans-serif, "宋体"; font-size: 14px; } #error_head .title .home a { color: #000; } #error_head .title .home a:hover { color: #FFF; } #message_txt .tip { margin-top: 20px; } </style> </head> <body><div id="error_head"><div class="title"><span class="err">检测消息</span><span class="home"></span></div></div><div id="message"><div id="message_txt"><div class="msg"><span class="error"><?php echo $msg['content']; ?></span></div> <?php if($msg['url_info']){?> <!-- div class="tip">如果您的浏览器没有下载请点击 <a href="<?php echo $msg['back_url']; ?>">这里</a></div --> <div class="tip"> <?php if($msg['url_info']){?> <?php foreach( $msg['url_info'] as $info=>$url ){?> <p style="line-height:20px;"><a href="<?php echo $url; ?>">《 <?php echo $info; ?></a></p> <?php } ?> <?php } ?> </div> <?php } ?> </div><div class="clear"></div></div></body></html> <?php exit; }
文明上网理性发言,请遵守新闻评论服务协议
0 条评论
发布评论
全部评论
最新
/
最热
暂无评论
加载更多
CopyRight 2002~2023 精通2100网 联系邮箱:qqtxt@163.com
版权所有:精通2100网
湘ICP备2023018646号-1
MYSQl共执行 3 个查询,用时 0.0018737316131592 秒,PHP脚本用时 0.004303 秒,占用内存 0.556 MB,Gzip 已启用