<?phpclass PaymentAction extends Action {/*** 自己的paypal账号*/private $account = 'XXXXX@gmail.com';/*** paypal支付网关地址*/private $gateway = 'https://www.paypal.com/cgi-bin/webscr?';public function index() {echo '<a href="'.U('Payment/order').'">Payment this order.</a>';}/*** 生成订单并跳转到Paypal进行支付*/public function order() {/*** 自己的逻辑代码* 判断是否登录、购买的哪个商品、购物车等等逻辑* 当然可以调用Model更简单点* 这里不在赘述*//** ...... **/$order_info = array();// 初始化订单数据$order_id = uniqid();// 按照自己的规则生成订单号入库/*** 订单包含哪几种商品、谁买的、什么时间、几件*/$order_info['order_id'] = $order_id;$order_info['member_id'] = Session::get('member_id');/** .... **/$order = D('Order');if( $order->createOrder($order_info) ) {unset($order,$order_info);$pp_info = array();// 初始化准备提交到Paypal的数据$pp_info['cmd'] = '_xclick';// 告诉Paypal,我的网站是用的我自己的购物车系统$pp_info['business'] = $this->account;// 告诉paypal,我的(商城的商户)Paypal账号,就是这钱是付给谁的$pp_info['item_name'] = "支付订单:{$order_id}";// 用户将会在Paypal的支付页面看到购买的是什么东西,只做显示,没有什么特殊用途,如果是多件商品,则直接告诉用户,只支付某个订单就可以了$pp_info['amount'] = '13'; // 告诉Paypal,我要收多少钱$pp_info['currency_code'] = 'USD';// 告诉Paypal,我要用什么货币。这里需要注意的是,由于汇率问题,如果网站提供了更改货币的功能,那么上面的amount也要做适当更改,paypal是不会智能的根据汇率更改总额的$pp_info['return'] = 'http://www.domain.com/index.php/payment/finish';// 当用户成功付款后paypal会将用户自动引导到此页面。如果为空或不传递该参数,则不会跳转$pp_info['invoice'] = $order_id;$pp_info['charset'] = 'utf-8';$pp_info['no_shipping'] = '1';$pp_info['no_note'] = '1';$pp_info['cancel_return'] = 'http://www.domain.com/index.php/product/view/pid/3';// 当跳转到paypal付款页面时,用户又突然不想买了。则会跳转到此页面$pp_info['notify_url'] = 'http://www.domain.com/index.php/payment/notify/orderid/'.$order_id;// Paypal会将指定 invoice 的订单的状态定时发送到此URL(Paypal的此操作,是paypal的服务器和我方商城的服务器点对点的通信,用户感觉不到)$pp_info['rm'] = '2';$paypal_payment_url = $this->gateway.http_build_query($pp_info);echo "<a href='{$paypal_payment_url}'>Go Paypal!</a>";unset($pp_info);} else {$this->error(L('order_create_fail'));}}public function finish() {$this->success('购买成功');}public function notify() {// 由于这个文件只有被Paypal的服务器访问,所以无需考虑做什么页面什么的,这个页面不是给人看的,是给机器看的$order_id = (int) $_GET['orderid'];$order_info = D('Order')->getOrderDetail($order_id);// 由于该URL不仅仅只有Paypal的服务器能访问,其他任何服务器都可以向该方法发起请求。所以要判断请求发起的合法性,也就是要判断请求是否是paypal官方服务器发起的// 拼凑 post 请求数据$req = 'cmd=_notify-validate';// 验证请求foreach ($_POST as $k=>$v){$v = urlencode(stripslashes($v));$req .= "&{$k}={$v}";}$ch = curl_init();curl_setopt($ch,CURLOPT_URL,'http://www.paypal.com/cgi-bin/webscr');curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_POST,1);curl_setopt($ch,CURLOPT_POSTFIELDS,$req);$res = curl_exec($ch);curl_close($ch);if( $res && !empty($order_info) ) {// 本次请求是否由Paypal官方的服务器发出的请求if(strcmp($res, 'VERIFIED') == 0) {/*** 判断订单的状态* 判断订单的收款人* 判断订单金额* 判断货币类型*/if(($_POST['payment_status'] != 'Completed' && $_POST['payment_status'] != 'Pending') OR ($_POST['receiver_email'] != $this->account) OR ($_POST['mc_gross'] != 13) OR ('USD' != $_POST['mc_currency'])) {// 如果有任意一项成立,则终止执行。由于是给机器看的,所以不用考虑什么页面。直接输出即可exit('fail');} else {// 如果验证通过,则证明本次请求是合法的D('Order')->finishOrder($order_id);// 更改订单状态exit('success');}} else {exit('fail');}}}
} 

在thinkphp中 结合 支付宝 paypal 财付通相关推荐

  1. 在thinkphp中 结合 支付宝 paypal 财付通 .

    <?php class PaymentAction extends Action { /**      * 自己的paypal账号      */     private $account = ...

  2. Magento支付宝手机网站支付插件V6.0旗舰版发布,支持在微信中使用支付宝支付,订单重新支付功能!...

    2019独角兽企业重金招聘Python工程师标准>>> 功能 严格按照支付宝接口文档编写代码. 支付宝异步通知机制,确保订单状态及时更新,无丢失遗漏. 订单完美对接:支付后即使关掉支 ...

  3. ThinkPHP中vendor()方法导入第三方类库的用法!ThinkPHP 3.2 vendor()方法的深入研究!

    ThinkPHP vendor 方法导入第三方类库 第三方类库 第三方类库指除了 ThinkPHP 框架.应用项目类库之外的其他类库,一般由第三方系统或产品提供,如 Smarty.Zend 等系统的类 ...

  4. 支付宝、财付通、快钱 三种功能特点的不同

    支付宝.财付通.快钱 三种功能特点的不同 随着电子商务的日益繁荣,网上支付已经进入了我们的日常生活中.那么我们比较熟悉的支付宝.财付通.快钱它们的功能特点有什么不同呢? (一).支付宝 支付宝安全.简 ...

  5. 开发如何选择。。。网银在线,快钱,支付宝,财付通

    转载百度文库. 做B2C半年了,用了4个支付网关.写点东西做个比较. 云网因为程序不正规,直接排除掉了.还有贝宝因为亲身见过有人因为漏洞被骗钱,也直接过滤掉了. 现在用网银在线,快钱,支付宝,财付通. ...

  6. thinkPHP6中实现支付宝支付

    我用的是沙箱环境做的测试, 步骤如下: 获取配置信息 点击进入网站, 当然在此之前要先申请个沙箱应用 下图是获取到 APPID, 后面会用到 下面是获取到公钥和私钥, 由于我之前设置过公钥, 如果是刚 ...

  7. 大型的支付系统,如支付宝、财付通,后系统是如何对账、风控的呢

    1.对账周期:A公司对玩家开放了包括支付宝.财付通在内的十余种电子支付渠道,大部分都是按月对账的,即当月1-10号(视渠道有差异)进行对账,然后11号开始打款/转账.部分渠道可能是本月对上上个月的账, ...

  8. php扫码获取财付通cookie,基于OpenCart 开发支付宝,财付通,微信支付参数错误问题...

    最近在给OpenCart集成支付宝,财付通和微信扫码支付,其实这些插件都是有的卖的,但是还蛮贵的,还是自己开发集成吧,省钱.但是集成过程中发现了一些坑,有opencart的坑,也有支付sdk的坑,浪费 ...

  9. 网银,快钱,支付宝,财付通的比较

    这是小强整理出来的,我想大多数开网店的朋友都会很关注这些,毕竟支付这是和钱直接打交道的东西.然而国内的第三方支付工具无外就这几种,下面看看小强怎么说. 云网因为程序不正规,直接排除掉了.还有贝宝因为亲 ...

最新文章

  1. 关于学习Python的一点学习总结(43->类中的方法重写)
  2. java轮盘赌_java人工蜂群算法求解TSP问题
  3. Ajax表单提交给C#后台选中的checkbox值
  4. batch-size 深度学习笔记
  5. 两台服务器虚拟成一个ip地址,两台服务器如何用一个ip地址
  6. 雅加达poi_雅加达EE:干净的板岩
  7. ubuntu 软件包降级
  8. LeetCode 2022春季赛 2. 烹饪料理(状态枚举)
  9. Laravel 5.8 正式发布(文档翻译已启动)
  10. mysql存储ip地址_MySQL怎样存储IP地址
  11. C语言排序方法-----二分插入排序
  12. spring5源码-事务
  13. 服务器tomcat/mysql的一些有关命令
  14. 如何在Mac中使用预览应用合并PDF文件,Mac预览应用合并PDF文件?
  15. 华为招聘状态码RSA解密方法
  16. Day2:Surveying China’s livestreaming economy
  17. mysql 运维审计_【MySQL运维】MySQL审计管理
  18. Reac版本的Ant Design树形控件的使用、搜索关键字标红、只显示搜索匹配中的数据
  19. 大数据分析 | 用 Python 做文本词频分析
  20. 专注安防监控,雄迈消费类产品全线标配AI功能,让家用类监控更智能

热门文章

  1. js合并数组方法——js拓展运算符
  2. 小程序js合并数组方式
  3. NFT新的契机,多媒体NFT聚合平台OKALEIDO即将上线
  4. js 截取字符串 subStr()、substring()、slice() 方法
  5. 阿里飞冰 设置 vscode 编辑器 启动脚本
  6. 利用Python将文本中的中英文分离
  7. ECLIPSE快捷键大全 掌握了这个看着你就牛
  8. 互联网汽车开进景区,天猫双11期间飞猪未来景区玩出新花样
  9. 解决iframe动态切换src后历史记录,导致页面后退变为iframe后退的问题
  10. KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记4——Directives