PHP调用支付宝接口(源码)
2014-03-21 15:26
423 查看
//啥也不说,代码呈上 = =
servers.php 〈?php /** * 生成向支付宝发送付款请求的联接 * */ class Alipay_Service { /** * 生成的请求URL * * @var string */ public $url = ”; /** *接口的所有参数入口 * * @var array */ private $_parameter = array(); /** *构造函数,实例化一个支付宝付款请求服务 * * @param array $parameter */ public function __construct(array $parameter) { if (is_array($parameter)) { $this-〉_parameter = $parameter; $this-〉_createUrl(); } else { throw new Exception(’Parameter Error’); } } /** * 构造一个请求的URL。 * * @return string */ private function _createUrl() { if ($this-〉_parameter["sign_type"] === ‘MD5′) { $parameter = $this-〉_getVal(); $url_val = ”; foreach ($parameter as $key =〉 $value) { if (strlen($value) !== 0) { $url_val .= $key .’=’.urlencode($this-〉_charDecode($value)).’&’; } } $this-〉url = $this-〉_parameter["gateway"].’?’.$url_val.’sign=’.md5($this-〉_sortVal().$this-〉_parameter["security_code"]).’&sign_type=MD5′; } else { throw new Exception(’系统暂时不支持’.$this-〉_parameter["sign_type"].’加密方式’); } } /** *此函数生成参数数组,将需要的参数包含进一个数组里,固定请求URL的参数 * * @return array */ private function _getVal() { return array(’subject’ =〉 $this-〉_parameter["parameter"]["subject"], ’service’ =〉 $this-〉_parameter["parameter"]["service"], ‘partner’ =〉 $this-〉_parameter["partner"], ‘notify_url’ =〉 $this-〉_parameter["notify_url"], ‘return_url’ =〉 $this-〉_parameter["return_url"], ‘_input_charset’ =〉 $this-〉_parameter["_input_charset"], ‘out_trade_no’ =〉 $this-〉_parameter["parameter"]["out_trade_no"], ‘total_fee’ =〉 sprintf(’%0.2f’, $this-〉_parameter["parameter"]["total_fee"]), ‘quantity’ =〉 $this-〉_parameter["parameter"]["quantity"], ‘payment_type’ =〉 $this-〉_parameter["parameter"]["payment_type"], ‘logistics_type’ =〉 $this-〉_parameter["parameter"]["logistics_type"], ‘logistics_fee’ =〉 $this-〉_parameter["parameter"]["logistics_fee"], ’seller_email’ =〉 $this-〉_parameter["seller_email"]); } /** * 返回一个URL的参数部分,例如:aaa=111&bbb=222&ccc=3333 * * @return string */ private function _sortVal() { $parameter = $this-〉_getVal(); //对参数数组排序,并且把数组指针调回数组开头 ksort($parameter); reset($parameter); $url_var = ”; foreach ($parameter as $key =〉 $value) { if (strlen($value) !== 0) { $url_var .= ‘&’.$key .’=’.$this-〉_charDecode($value); } } return $url_var = substr($url_var, 1); } /** * 将字符串编码成UTF-8。 * * @param string $var * @param string $charset * @return string */ private function _charDecode($var, $charset = ‘UTF-8′) { if (strtoupper($this-〉_parameter["_input_charset"]) === $charset || strlen($var) == 0) { return $var; } else { return mb_convert_encoding($value, $charset, $this-〉_parameter["_input_charset"]); } } }?〉 notify.php 〈?php class Alipay_Notify { /** * 确认通知的url * * @var string */ private $_url = ”; /** * 接收支付宝外部通知参数 * * @var array */ private $_postvar = array(); /** * 接收支付宝返回通知的参数 * * @var array */ private $_getvar = array(); /** * 接收到的字符编码 * * @var string */ private $_charset; /** * 参数设置 * * @var array */ private $_parameter = array(); /** *初始设置 * * @param array $var */ public function __construct(array $var) { if (is_array($var)) { $this-〉_parameter = $var; if ($_SERVER["REQUEST_METHOD"] == ‘POST’) { $this-〉_postvar = $_POST; if (isset($_POST["_input_charset"])) { $this-〉_charset = $_POST["_input_charset"]; } else { $this-〉_charset = ‘UTF-8′; } } else { $this-〉_getvar = $_GET; if (isset($_GET["_input_charset"])) { $this-〉_charset = $_GET["_input_charset"]; } else { $this-〉_charset = ‘UTF-8′; } } } else { throw new Exception(’Parameter Error’); } } /** *发回支付宝确认信息是支付宝发的。 *本文转载 * @return string */ private function getVerify() { $urlarr = parse_url($this-〉_url); $time_out = ‘60′; $errno = ”; $errstr = ”; $transports = ‘tcp://’; $urlarr["port"] = ‘80′; $fp = fsockopen($transports . $urlarr["host"], $urlarr["port"], $errno, $errstr, $time_out); if ($fp) { fputs($fp, “POST “.$urlarr["path"].” HTTP/1.1\r\n”); fputs($fp, “Host: “.$urlarr["host"].”\r\n”); fputs($fp, “Content-type: application/x-www-form-urlencoded\r\n”); fputs($fp, “Content-length: “.strlen($urlarr["query"]).”\r\n”); fputs($fp, “Connection: close\r\n\r\n”); fputs($fp, $urlarr["query"] . “\r\n\r\n”); while(!feof($fp)) { $info[] = fgets($fp, 1024); } fclose($fp); $info = implode(’,", $info); //$this-〉_writeLog(’return_url_log:’.$this-〉_url); //$this-〉_writeLog(’return_word_log:’.$info); return $info; } else { $this-〉_writeLog(’return_word_log:’.$errno.’-’.$errstr); } } /** * 向支付宝验证外部通知的合法性。 *本文转载 * @return bool */ public function notifyVerify() { $this-〉_url = $this-〉_parameter["notifyway"].’?service=notify_verify¬ify_id=’.$this-〉_postvar["notify_id"].’&partner=’.$this-〉_parameter["partner"]; $vail_result = $this-〉getVerify(); $urlvar = $this-〉sortArr($this-〉_postvar); return (eregi(”true$”, $vail_result) && strtoupper($this-〉_postvar["sign"]) == strtoupper(md5($urlvar.$this-〉_parameter["security_code"]))); } /** * 向支付宝验证跳转参数的合法性。 *本文转载 * @return bool */ public function returnVerify() { $this-〉_url = $this-〉_parameter["notifyway"].’?service=notify_verify¬ify_id=’.$this-〉_getvar["notify_id"].’&partner=’.$this-〉_parameter["partner"]; $vail_result= $this-〉getVerify(); $urlvar = $this-〉sortArr($this-〉_getvar); return (eregi(”true$”, $vail_result) && strtoupper($this-〉_getvar["sign"]) == strtoupper(md5($urlvar.$this-〉_parameter["security_code"]))); } /** * 由数组生成加密字符串。 * * @param array $var * @return string */ private function sortArr(array $var) { $urlvar = ”; ksort($var); reset($var); foreach ($var as $key =〉 $value) { if (strlen($value) != 0 && $key != ’sign’ && $key != ’sign_type’ && $key != ‘action’ && $key != ‘controller’) { $urlvar .= ‘&’.$key.’=’.$value; } } return $urlvar = substr($urlvar, 1); } /** *写系统支付操作日志 * * @param string $var */ private function _writeLog($var, $logpath = ROOT_DIR) { $fp = fopen($logpath.’\log\alipay_log.txt’,"a’); flock($fp, LOCK_EX) ; fwrite($fp,$var.’:执行日期:’.strftime(’%Y%m%d%H%I%S’,time()).”\t\n”); flock($fp, LOCK_UN); fclose($fp); } /** * 将字符串解码码成指定格式。 * * @param string $var * @return string */ private function _charDecode($var) { if (strtoupper($this-〉_parameter["_input_charset"]) == strtoupper($this-〉_charset) || strlen($var) == 0) { return $var; } else { return mb_convert_encoding($value, $this-〉_parameter["_input_charset"], $this-〉_charset); } } } ?〉
相关文章推荐
- 调用支付宝PHP接口API实现在线即时支付功能(UTF-8编码)
- php 支付宝接口程序源码(完整版带实例)
- php调用支付宝PHP接口API实现在线即时支付功能
- php通过http调用验证码短信接口源码
- 调用支付宝PHP接口API实现在线即时支付功能(UTF-8编码)
- 验证码短信接口php调用http源码
- php支付宝调用接口
- php编程之如何调用支付宝支付接口的实现
- PHP用户管理中常用接口调用实例及解析(含源码)
- Intel 英特尔之开发人员专区 ------Android 开发之Android 应用程序如何调用支付宝接口
- EJBCA与项目整合-第三章-EJBCA源码研究-用户实体操作WebService接口调用
- java调用webservice接口完整源码
- android应用程序如何调用支付宝接口
- 在php中调用接口以及编写接口
- php中创建和调用webservice接口示例
- 关于 php 调用 其他语言写的Web Service SOAP 接口的参数传递问题
- android应用程序如何调用支付宝接口
- android程序如何调用支付宝接口
- 浅谈PHP调用Webservice思路及源码分享
- PHP调用内容DES加密的SOAP接口