paypal接口对接注意事项

在paypal对接过程中,会存在return_url和notify两种

分别用pdt和ipn实现

但是对于paypal,大家请注意,真实环境和沙盒测试环境的区别

你可以到www.paypal.com注册一个账号,然后在developer.paypal.com下面登陆,会发现生成了一个测试的商家账号和一个测试的买家账号,这两个账号是准备着方便你进行对接调试的。

但是大家不要忘了,要想测试通过,还得在www.sandbox.paypal.com用商家测试账号登陆(记住一定要是商家测试账号,不是买家测试账号),在

/**
     * 通过PDT验证付款后paypal返回的数据
     * @param type $tx 交易流水号,通过Get获取
     * @param type $pdt_identity_token 商家唯一身份标记
     * @return 订单明细数据
     * @throws \Exception
     */
    public function verifyReturn($tx, $pdt_identity_token) {

if(empty($tx))
        {
            throw new \Exception("Unexpected response from PayPal or Others.");
        }
        
        $encoded_data = http_build_query(array
                (
                        ‘cmd‘ => ‘_notify-synch‘,
                        ‘tx‘ => strtoupper($tx),
                        ‘at‘ => $pdt_identity_token,
                ));

//         $encoded_data = ‘cmd=_notify-synch&tx=$tx&at=$pdt_identity_token‘;      
        
        if ($this->use_curl) 
        {
            $this->curlPost($encoded_data); 
        }
        else 
        {
            $this->fsockPost($encoded_data);
        }
        
        $status = strpos($this->response_status, ‘200‘);       
        
        // check responses, if first 7 letters are SUCCESS then we‘re good
        if($this->response_status == 200 && strpos($this->response, "SUCCESS") !== false)
        {
                // get rid of success
                $curlResponse = substr($this->response, 7);
                // decode
                $curlResponse = urldecode($curlResponse);
                // make associative array
                preg_match_all(‘/^([^=\r\n]++)=(.*+)/m‘, $curlResponse, $m, PREG_PATTERN_ORDER);
                
                $curlResponse = array_combine($m[1], $m[2]);
                // keysort to keep in order
                ksort($curlResponse);
                
                // end
                return $curlResponse;
        }
        else
        {
                throw new \Exception("Invalid response status: ".$this->response_status);
        }                
    }

九域程序胡静 2015/12/3 12:13:28

protected function curlPost($encoded_data) {

if ($this->use_ssl) {
            $uri = ‘https://‘.$this->getPaypalHost().‘/cgi-bin/webscr‘;
            $this->post_uri = $uri;
        } else {
            $uri = ‘http://‘.$this->getPaypalHost().‘/cgi-bin/webscr‘;
            $this->post_uri = $uri;
        }
        
        $ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $uri);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $encoded_data);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
//         curl_setopt($ch, CURLOPT_CAINFO, 
//         dirname(__FILE__)."/cert/cert_key.pem");
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Host: ".$this->getPaypalHost()));
        
        
//         curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $this->follow_location);
        curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout);
        
//         curl_setopt($ch, CURLOPT_HEADER, true);
        
//         if ($this->force_tls_v1) {
//             curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
//         }

$this->response = curl_exec($ch);
        
        $this->response_status = strval(curl_getinfo($ch, CURLINFO_HTTP_CODE));
        
        if ($this->response === false || $this->response_status == ‘0‘) {
            $errno = curl_errno($ch);
            $errstr = curl_error($ch);
            
            throw new \Exception("cURL error: [$errno] $errstr");
        }
    }

时间: 2024-11-11 19:12:25

paypal接口对接注意事项的相关文章

B2B商城电子商务平台网上商城系统支付通道申请第三方支付接口对接搭建 支付宝微信扫码网关网银银联快捷支付

需要了解 JR金融项目 区块链,比特币,p2p项目,B2B网关,现货资金盘,期货招商,股票配资,商品交易所 大盘的 金融支付 第三方支付,网关支付,网银支付,银行卡支付,话费卡支付,银联代扣,支付渠道,支付宝支付,微信支付,扫码支付,快捷支付,支付牌照申请,线上支付通道搭建,支付通道申请,支付接口对接,原生支付宝网关支付!独立后台,D0实时结算,API批量代付接口 JR / BC / QP 菠菜奔驰游戏等稳定安全通道!大量三方支付资质出售!请加QQ 2954704394 近年来,第三方支付发展势

免费圆通电子面单接口对接

电子面单接口是快递鸟提供给独立电商.仓储管理系统.物流供应链等物流系统平台使用的下单接口,满足客户在线发货需求并提供打印面单的服务,客户通过网络选择物流公司发送请求通知贵公司有快递要发货,把数据通过此接口转发到快递鸟,由快递鸟为您通知对应的快递公司快递员上门取件.电子面单成功下单后,快递鸟系统内将自动订阅,一旦轨迹发生变化时,快递鸟将调用客户方推送接收接口.同时若客户使用代收货款服务,快递鸟会将代收货款的货款状态独立推送给用户. 一.接口描述 (1)订单编号(OrderCode)不可重复提交,重

EF线程唯一与DBSession接口对接

EF 是(entity framework)对于数据库上下文dbcontext 启动线程唯一,是为了处理数据时没有脏数据,可以使用工厂来共同创建DbContext  DBSession实例代码: public class DBSession:IDBSession { private DbContext Db { get { //创建线程唯一的ef,DBContextFactory是EF工厂 return DBContextFactory.CreateUnityConText(); } } DBC

常用电子面单接口对接技术文档

一.电子面单接口类型及定义 1. 快递电子面单接口:快递公司自己开发的电子面单服务, 商家使用必须快递公司上门做系统对接,使用一家快递则需要对接一次. 2.菜鸟电子面单接口:可一次对接15家快递公司, 无需和每一家快递公司做对接.支持快递有四通一达.EMS.宅急送.德邦.优速.天天.快捷.全峰等15家常用快递公司,其中不包括顺丰. 3.快递鸟电子面单接口:可一次对接15家快递公司, 无需和每一家快递公司做对接.支持快递有四通一达.顺丰.EMS.宅急送.德邦.优速等15家快递公司,对顺丰有电子面单

圆通电子面单接口对接及调试

电子面单接口是快递鸟提供给独立电商.仓储管理系统.物流供应链等物流系统平台使用的下单接口,满足客户在线发货需求并提供打印面单的服务,客户通过网络选择物流公司发送请求通知贵公司有快递要发货,把数据通过此接口转发到快递鸟,由快递鸟为您通知对应的快递公司快递员上门取件.电子面单成功下单后,快递鸟系统内将自动订阅,一旦轨迹发生变化时,快递鸟将调用客户方推送接收接口.同时若客户使用代收货款服务,快递鸟会将代收货款的货款状态独立推送给用户. 一.接口描述 (1)订单编号(OrderCode)不可重复提交,重

PHP 接口开发注意事项

PHP 接口开发注意事项 预先定义接口流程和逻辑,确认需求 在开发前首先确定流程,复杂的接口可以绘制流程图,并确保流程与需求一致: 使用统一的变量定义 无论是SDK还是Server均因同一变量的定义以及全局变量的设置.目的是方便维护 完善的异常处理机制 接口是向外提供服务的,一旦出现异常影响较大,甚至影响系统的安全.因此需要一套完善的异常处理机制.如常见的网络连接超时等,对file_get_contents和fsocket之类的函数,需要使用@抑制错误输出 统一的提示信息输出格式 统一格式的输出

图片与接口对接的时候出现这样的报错

图片与接口对接的时候出现这样的报错:控制台输出这样一句话,CUICatalog: Invalid asset name supplied: , or invalid scale factor: 2.000000 错误原因:在ios7中设置imageView的image时,实例化image时不能传nil,(self.imageView.image = [UIImage imageNamed:nil] 上图所报的错,就是因为这句话). 在ios6中,这样写,控制台不会打印异常日志. <<<&

电子面单批量打印接口对接(含打印控件)

现电商平台.打单工具.ERP 系统.WEB 端.APP 移动端等企业发货量较大,电子面单打印接口的需求也日益增加,现在给大家做一下梳理和使用方法介绍. 目前支持批量打印电子面单的有快递鸟.菜鸟和快递公司.但是快递公司仅能打印本公司的电子面单,对于电商等发货商来说不太适用,菜鸟教适合淘系商家,快递鸟则比较通用,这里介绍快递鸟电子面单接口批量打印的方法 对接流程: 快递鸟网站申请接口KEY-对接接口-调试-上线使用 接口支持: 顺丰(SF).EMS(EMS).宅急送(ZJS).圆通(YTO).百世快

Pytorch:AG接口,BBIN接口,MG接口,PT接口对接平台权重初始化

在TensorFlow中,AG接口,BBIN接口,MG接口,PT接口对接平台Q2222168869权重的初始化主要是在声明张量的时候进行的. 而PyTorch则提供了另一种方法:首先应该声明张量,然后修改张量的权重.通过调用torch.nn.init包中的多种方法可以将权重初始化为直接访问张量的属性. 1.不初始化的效果在Pytorch中,定义一个tensor,不进行初始化,打印看看结果: w = torch.Tensor(3,4)print (w) 可以看到这时候的初始化的数值都是随机的,而且