在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"); } } 分类: php 标签: paypal