在thinkphp中 结合 支付宝 paypal 财付通
<?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 财付通相关推荐
- 在thinkphp中 结合 支付宝 paypal 财付通 .
<?php class PaymentAction extends Action { /** * 自己的paypal账号 */ private $account = ...
- Magento支付宝手机网站支付插件V6.0旗舰版发布,支持在微信中使用支付宝支付,订单重新支付功能!...
2019独角兽企业重金招聘Python工程师标准>>> 功能 严格按照支付宝接口文档编写代码. 支付宝异步通知机制,确保订单状态及时更新,无丢失遗漏. 订单完美对接:支付后即使关掉支 ...
- ThinkPHP中vendor()方法导入第三方类库的用法!ThinkPHP 3.2 vendor()方法的深入研究!
ThinkPHP vendor 方法导入第三方类库 第三方类库 第三方类库指除了 ThinkPHP 框架.应用项目类库之外的其他类库,一般由第三方系统或产品提供,如 Smarty.Zend 等系统的类 ...
- 支付宝、财付通、快钱 三种功能特点的不同
支付宝.财付通.快钱 三种功能特点的不同 随着电子商务的日益繁荣,网上支付已经进入了我们的日常生活中.那么我们比较熟悉的支付宝.财付通.快钱它们的功能特点有什么不同呢? (一).支付宝 支付宝安全.简 ...
- 开发如何选择。。。网银在线,快钱,支付宝,财付通
转载百度文库. 做B2C半年了,用了4个支付网关.写点东西做个比较. 云网因为程序不正规,直接排除掉了.还有贝宝因为亲身见过有人因为漏洞被骗钱,也直接过滤掉了. 现在用网银在线,快钱,支付宝,财付通. ...
- thinkPHP6中实现支付宝支付
我用的是沙箱环境做的测试, 步骤如下: 获取配置信息 点击进入网站, 当然在此之前要先申请个沙箱应用 下图是获取到 APPID, 后面会用到 下面是获取到公钥和私钥, 由于我之前设置过公钥, 如果是刚 ...
- 大型的支付系统,如支付宝、财付通,后系统是如何对账、风控的呢
1.对账周期:A公司对玩家开放了包括支付宝.财付通在内的十余种电子支付渠道,大部分都是按月对账的,即当月1-10号(视渠道有差异)进行对账,然后11号开始打款/转账.部分渠道可能是本月对上上个月的账, ...
- php扫码获取财付通cookie,基于OpenCart 开发支付宝,财付通,微信支付参数错误问题...
最近在给OpenCart集成支付宝,财付通和微信扫码支付,其实这些插件都是有的卖的,但是还蛮贵的,还是自己开发集成吧,省钱.但是集成过程中发现了一些坑,有opencart的坑,也有支付sdk的坑,浪费 ...
- 网银,快钱,支付宝,财付通的比较
这是小强整理出来的,我想大多数开网店的朋友都会很关注这些,毕竟支付这是和钱直接打交道的东西.然而国内的第三方支付工具无外就这几种,下面看看小强怎么说. 云网因为程序不正规,直接排除掉了.还有贝宝因为亲 ...
最新文章
- 关于学习Python的一点学习总结(43->类中的方法重写)
- java轮盘赌_java人工蜂群算法求解TSP问题
- Ajax表单提交给C#后台选中的checkbox值
- batch-size 深度学习笔记
- 两台服务器虚拟成一个ip地址,两台服务器如何用一个ip地址
- 雅加达poi_雅加达EE:干净的板岩
- ubuntu 软件包降级
- LeetCode 2022春季赛 2. 烹饪料理(状态枚举)
- Laravel 5.8 正式发布(文档翻译已启动)
- mysql存储ip地址_MySQL怎样存储IP地址
- C语言排序方法-----二分插入排序
- spring5源码-事务
- 服务器tomcat/mysql的一些有关命令
- 如何在Mac中使用预览应用合并PDF文件,Mac预览应用合并PDF文件?
- 华为招聘状态码RSA解密方法
- Day2:Surveying China’s livestreaming economy
- mysql 运维审计_【MySQL运维】MySQL审计管理
- Reac版本的Ant Design树形控件的使用、搜索关键字标红、只显示搜索匹配中的数据
- 大数据分析 | 用 Python 做文本词频分析
- 专注安防监控,雄迈消费类产品全线标配AI功能,让家用类监控更智能
热门文章
- js合并数组方法——js拓展运算符
- 小程序js合并数组方式
- NFT新的契机,多媒体NFT聚合平台OKALEIDO即将上线
- js 截取字符串 subStr()、substring()、slice() 方法
- 阿里飞冰 设置 vscode 编辑器 启动脚本
- 利用Python将文本中的中英文分离
- ECLIPSE快捷键大全 掌握了这个看着你就牛
- 互联网汽车开进景区,天猫双11期间飞猪未来景区玩出新花样
- 解决iframe动态切换src后历史记录,导致页面后退变为iframe后退的问题
- KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记4——Directives