醉近在做一个国外支付的项目 看到论坛上面那个v9的PayPal支付模块 有点问题 所以自己搞了一个
弟一步:添加语言包 添加下面代码到 phpcms\\languages\\zh-cn\\pay.lang.php
$LANG['paypal'] = 'PayPal支付';
$LANG['paypal_tip'] = 'PayPal, 全球在线收付款解决方案领导者,快速,安全便捷的网上支付平台,为中国提供PayPal新用户培训及电子商务一站式专业服务。<a href="http://www.paypal.com" target="_blank"><font color="red">立即在线申请Paypal</font></a>';
$LANG['paypal_account'] = '商户帐号';
$LANG['paypal_currency'] = '支付货币';
$LANG['paypal_sandbox'] = '测试环境(Sandbox)';
$LANG['paypal_sandbox_range'][0] = "开启";
$LANG['paypal_sandbox_range'][1] = "关闭";
$LANG['paypal_currency_range']['AUD'] = '澳元';
$LANG['paypal_currency_range']['CAD'] = '加元';
$LANG['paypal_currency_range']['EUR'] = '欧元';
$LANG['paypal_currency_range']['GBP'] = '英镑';
$LANG['paypal_currency_range']['JPY'] = '日元';
$LANG['paypal_currency_range']['USD'] = '美元';
$LANG['paypal_currency_range']['HKD'] = '港元';
第二步:保存下面代码命名为“PayPal.class.php”到\\phpcms\\modules\\pay\\classes
<?php
if (isset($set_modules) && $set_modules == TRUE)
{
$i = isset($modules) ? count($modules) : 0;
$modules[$i]['code'] = basename(__FILE__, '.class.php');
$modules[$i]['name'] = L('paypal', '', 'pay');
$modules[$i]['desc'] = L('paypal_tip', '', 'pay');
$modules[$i]['is_cod'] = '0';
$modules[$i]['is_online'] = '1';
$modules[$i]['author'] = 'PHPCMS开发团队';
$modules[$i]['website'] = 'http://www.paypal.com';
$modules[$i]['version'] = '1.0.0';
$modules[$i]['config'] = array(
array('name' => 'paypal_account','type' => 'text','value' => ''),
array('name' => 'paypal_currency','type' => 'select','value' => 'USD'),
array('name' => 'paypal_sandbox','type' => 'select','value' => '1')
);
return;
}
pc_base::load_app_class('pay_abstract','','0');
class PayPal extends paymentabstract{
public function __construct($config = array()) {
if (!empty($config)) $this->set_config($config);
$paypal_currency_arr = array('AUD','CAD','EUR','GBP','JPY','USD','HKD');
$this->config['currency'] = in_array($this->config['paypal_currency'],$paypal_currency_arr) ? $this->config['paypal_currency'] : 'USD';
if($this->config['paypal_sandbox']==0){
$this->config['gateway_url'] = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
$this->config['verify_url'] = 'www.sandbox.paypal.com';
}
else{
$this->config['gateway_url'] = 'https://www.paypal.com/cgi-bin/webscr';
$this->config['verify_url'] = 'www.paypal.com';
}
$this->config['gateway_method'] = 'POST';
$this->config['return_url'] = return_url('PayPal');
$this->config['notify_url'] = return_url('PayPal',1);
//pc_base::load_app_func('alipay');
}
public function getpreparedata() {
//固定值
$prepare_data['cmd'] = '_xclick';
//商户帐号
$prepare_data['business'] = $this->config['paypal_account'];
//返回地址
$prepare_data['return'] = $this->config['return_url'];
//字符集
$prepare_data['charset'] = CHARSET;
//不提示邮寄低级
$prepare_data['no_shipping'] = 1;
//付款说明
$prepare_data['no_note'] = '';
//支付货币
$prepare_data['currency_code'] = $this->config['currency'];
//支付通知地址
$prepare_data['notify_url'] = $this->config['notify_url'];
//订单号
$prepare_data['invoice'] = $this->order_info['id'];
//订单名称
$prepare_data['item_name'] = $this->product_info['name'];
//订单金额
$prepare_data['amount'] = $this->product_info['price'];
return $prepare_data;
}
/**
* GET 支付后返回(没有对交易结果进行写入)
*
*/
public function receive() {
showmessage('交易完成 返回查看交易结果',APP_PATH.'index.php?m=pay&c=deposit&a=init');
return false;
}
/**
* POST接收数据
* 状态码说明 (0 交易完成 1 交易失败 2 交易操时 3 交易处理中 4 交易未支付 5交易取消6交易发生错误)
*/
public function notify() {
$req = 'cmd=_notify-validate';
foreach($_POST as $key=>$value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
$header .= "POST /cgi-bin/webscr HTTP/1.0\\r\\n";
$header .= "Content-Type:application/x-www-form-urlencoded\\r\\n";
$header .= "Content-Length:".strlen($req)."\\r\\n\\r\\n";
$fp = fsockopen($this->config['verify_url'], 80, $errno, $errstr, 30);
$item_invoice = $_POST['invoice'];
$item_number = $_POST['item_number'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];
$return_data['order_id'] = $item_invoice;
$return_data['order_total'] = $return_data['price'] = $payment_amount;
//判断回复 POST 是否创建成功
if (!$fp) {
$return_data['order_status'] = 6;
fclose($fp);
error_log(date('m-d H:i:s',SYS_TIME).'| POST: HTTP errer |'."\\r\\n", 3, CACHE_PATH.'pay_error_log.php');
return $return_data;
} else {
fputs($fp, $header.$req);
while (!feof($fp)) {
$res = fgets($fp, 1024);
//已经通过认证
if (strcmp ($res, "VERIFIED") == 0) {
if($payment_status != 'Completed'){
$return_data['order_status'] = 3;
fclose($fp);
return $return_data;
}
if($receiver_email != $this->config['paypal_account'])
{
$return_data['order_status'] = 6;
fclose($fp);
error_log(date('m-d H:i:s',SYS_TIME).'| POST: receiver_email errer |'."\\r\\n", 3, CACHE_PATH.'pay_error_log.php');
return $return_data;
}
if($payment_currency != $this->config['currency'])
{
$return_data['order_status'] = 6;
fclose($fp);
error_log(date('m-d H:i:s',SYS_TIME).'| POST: currency errer |'."\\r\\n", 3, CACHE_PATH.'pay_error_log.php');
return $return_data;
}
$return_data['order_status'] = 0;
} else if (strcmp($res, "INVALID") == 0) {
$return_data['order_status'] = 6;
error_log(date('m-d H:i:s',SYS_TIME).'| POST: INVALID errer |'."\\r\\n", 3, CACHE_PATH.'pay_error_log.php'); return $return_data;
}
}
fclose($fp);
}
return $return_data;
}
/**
* 相应服务器应答状态
* @param $result
*/
public function response($result) {
if (FALSE == $result) echo 'fail';
else echo 'success';
}
}
?>
说明: