Home  >  Article  >  php教程  >  【推荐】thinkphp支付宝API接口

【推荐】thinkphp支付宝API接口

WBOY
WBOYOriginal
2016-06-07 11:39:141819browse

thinkphp支付宝API接口非完整版代码
//=============================================<br> //本代码并非完美,也许存在不良之处,高手请多指点,请勿吐槽!<br> //作者 小曾 Qq839024615 可加我一起交流<br> //=============================================<br> <br> //注意以下代码是双功能收款代码(担保),非即时到账,网关,网银//<br> <br> //原理  <br> //用户提交请求,建立订单数据,跳至支付宝,支付成功后跳转(同步通知)<br> //同步通知道验证成功后,支付宝同时会返回支付信息,如单号,金额<br> //订时同步通知须与我们建立的订单数据对比,如果是则账户到账<br> //一般都是一样的,因为支付宝会验证签名这是加密的<br> //诺支付后没有跳转到同步通知怎么办,有异步通知防止订单丢失<br> //当支付完成后,因各种原因没有跳转,支付宝服务器会在1分钟内自动<br> //发送通知到您的服务器,也就是异步通知地址,异步文件接到后再进行处理<br> //诺又支付成功,也就是同步已处理过了,就不用处理了,告诉支付宝success已处理<br> //否则支付宝会不断的发出通知,直到24小时22分不再发送,<br> //诺同步通知未处理(也就是没跳转导致没处理),那就进行处理,得理成功<br> //同样返回success给支付宝服务器,诺处理失败则返回任何文字即可<br> //支付宝服务器知道你未处理成功,会再次发送通知<br> //让你处理完为止,否则24小时22分后不再发送 <br> <br> //支付宝提交<br> public function alipay(){<br> <br>     /**************************支付宝配置**************************/<br>     $alipay_config['partner']        = '2088****284';<br>     $alipay_config['seller_email']    = 'xz**********@139.com';<br>     $alipay_config['key']            = 'wvajc*************bixumm';<br>     $alipay_config['sign_type']    = strtoupper('MD5');<br>     $alipay_config['input_charset']= strtolower('utf-8');<br>     //cacert.pem文件放根目录 log.txt也放根目录<br>     //cacert.pem 是签名用的 log.txt是调试用写日志的<br>     $alipay_config['cacert']    = getcwd().'\\cacert.pem';<br>     $alipay_config['transport']    = 'http';<br>     //异步地址 就是支付完支付宝服务器会向这个地址发送数据,防止订单丢失<br>     $notify_url="http://你的域名".U("Alipay/notify_url"); <br>     //同步跳转地址 就是支付完后跳转到这里<br>     $return_url="http://你的域名".U("Alipay/return_url"); <br>     //注意伪静态隐藏index.php 否则无效 因回调地址带 xxx.php?a=b GET参数<br>     //伪静态后地址 http://abc.com/Alipay/return_url.html 不可有GET哈<br>     <br>     /**************************支付宝配置**************************/<br>     $price=$_POST['price'];//支付金额<br>     $out_trade_no="M".Date("YmdHis",time()).time();//商户订单号<br>     vendor('AliPay.alipay_submit#class');//引入支付宝类库<br>     <br>     /**************************存入充值记录**************************/<br>     $data['uid']=session('id');<br>     $data['rmb']=$price;<br>     $data['type']="支付宝";<br>     $data['code']=$out_trade_no;<br>     $data['time']=time();<br>     $data['yes']=0;<br>     $ispay=M('Pay')->add($data);<br>     if(!$ispay){<br>         $this->error("订单写入失败");//提交过来入库,如果入库失败,则不往下执行支付宝<br>     }<br>     <br>     /**************************请求参数**************************/<br>     //支付类型<br>     $payment_type = "1";<br>     //商户订单号<br>     $out_trade_no = $out_trade_no;<br>     //订单名称<br>     $subject = "梦币充值";<br>     //必填<br>     //付款金额<br>     $price = $price;<br>     //必填<br>     //商品数量<br>     $quantity = "1";<br>     //必填,建议默认为1,不改变值,把一次交易看成是一次下订单而非购买一件商品<br>     $logistics_fee = "0.00";<br>     //必填,即运费<br>     //物流类型<br>     $logistics_type = "EXPRESS";<br>     //必填,三个值可选:EXPRESS(快递)、POST(平邮)、EMS(EMS)<br>     //物流支付方式<br>     $logistics_payment = "SELLER_PAY";<br>     //必填,两个值可选:SELLER_PAY(卖家承担运费)、BUYER_PAY(买家承担运费)<br>     //订单描述<br>     $body = "梦雪psd下载网 - 梦币充值";<br>     //商品展示地址<br>     $show_url = "http://www.qq839.com/index.php";<br>     //需以http://开头的完整路径,如:http://www.商户网站.com/myorder.html<br>     //收货人姓名<br>     $receive_name = $_POST['WIDreceive_name'];<br>     //如:张三<br>     //收货人地址<br>     $receive_address = $_POST['WIDreceive_address'];<br>     //如:XX省XXX市XXX区XXX路XXX小区XXX栋XXX单元XXX号<br>     //收货人邮编<br>     $receive_zip = $_POST['WIDreceive_zip'];<br>     //如:123456<br>     //收货人电话号码<br>     $receive_phone = $_POST['WIDreceive_phone'];<br>     //如:0571-88158090<br>     //收货人手机号码<br>     $receive_mobile = $_POST['WIDreceive_mobile'];<br>     //如:13312341234<br>     /************************************************************/<br>     //构造要请求的参数数组,无需改动<br>     $parameter = array(<br>         "service" => "trade_create_by_buyer",<br>         "partner" => trim($alipay_config['partner']),<br>         "seller_email" => trim($alipay_config['seller_email']),<br>         "payment_type"    => $payment_type,<br>         "notify_url"    => $notify_url,<br>         "return_url"    => $return_url,<br>         "out_trade_no"    => $out_trade_no,<br>         "subject"    => $subject,<br>         "price"    => $price,<br>         "quantity"    => $quantity,<br>         "logistics_fee"    => $logistics_fee,<br>         "logistics_type"    => $logistics_type,<br>         "logistics_payment"    => $logistics_payment,<br>         "body"    => $body,<br>         "show_url"    => $show_url,<br>         "receive_name"    => $receive_name,<br>         "receive_address"    => $receive_address,<br>         "receive_zip"    => $receive_zip,<br>         "receive_phone"    => $receive_phone,<br>         "receive_mobile"    => $receive_mobile,<br>         "_input_charset"    => trim(strtolower($alipay_config['input_charset']))<br>     );<br>     <br>     //建立请求<br>     $alipaySubmit = new AlipaySubmit($alipay_config);<br>     $html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");<br>     echo $html_text;<br> }<br> <br> <br> //支付宝同步跳转<br> public function return_url(){<br>     /**************************支付宝配置**************************/<br>     $alipay_config['partner']        = '20881*****10284';<br>     $alipay_config['seller_email']    = 'xz6*****9.com';<br>     $alipay_config['key']            = 'wvajcc*****igbixumm';<br>     $alipay_config['sign_type']    = strtoupper('MD5');<br>     $alipay_config['input_charset']= strtolower('utf-8');<br>     $alipay_config['cacert']    = getcwd().'\\cacert.pem';<br>     $alipay_config['transport']    = 'http';<br>     /**************************支付宝配置**************************/<br>     vendor('AliPay.alipay_notify#class');//引入类<br>     $alipayNotify = new AlipayNotify($alipay_config);<br>     $verify_result = $alipayNotify->verifyReturn();<br>     if($verify_result) {<br>         //商户订单号<br>         $out_trade_no = $_GET['out_trade_no'];<br>         //支付宝交易号<br>         $trade_no = $_GET['trade_no'];<br>         //交易状态<br>         //这里由自己写,也可以在这里直接写充值到账,也可以判断是否充值成功<br>         //异步通知写到账,我在这判断异步是否处理,这个由自己发挥<br>         $trade_status = $_GET['trade_status'];<br>         $where['code']=$out_trade_no;<br>         $F=M('Pay')->where($where)->find();<br>         if($F['yes']==0){<br>             $this->success("充值失败或正在处理,请等待几分钟",U('User/index'));<br>         }else{<br>             $this->success("充值成功",U('User/index'));<br>         }<br>     }else {<br>         echo "验证失败";<br>     }<br> }<br> <br> //支付宝异步通知<br> public function notify_url(){<br>     /**************************支付宝配置**************************/<br>     $alipay_config['partner']        = '2088******0284';<br>     $alipay_config['seller_email']    = 'x******.com';<br>     $alipay_config['key']            = 'wvaj******ixumm';<br>     $alipay_config['sign_type']    = strtoupper('MD5');<br>     $alipay_config['input_charset']= strtolower('utf-8');<br>     $alipay_config['cacert']    = getcwd().'\\cacert.pem';<br>     $alipay_config['transport']    = 'http';<br>     //这个配置可引入,无须多写填写<br>     /**************************支付宝配置**************************/<br>     vendor('AliPay.alipay_notify#class');<br>     $alipayNotify = new AlipayNotify($alipay_config);<br>     $verify_result = $alipayNotify->verifyNotify();<br>     if($verify_result) {//验证成功<br>         $out_trade_no = $_POST['out_trade_no'];<br>         //支付宝交易号<br>         $trade_no = $_POST['trade_no'];<br>         //交易状态<br>         $trade_status = $_POST['trade_status'];<br>         if($_POST['trade_status'] == 'WAIT_BUYER_PAY') {<br>         //该判断表示买家已在支付宝交易管理中产生了交易记录,但没有付款<br>         <br>             //判断该笔订单是否在商户网站中已经做过处理<br>                 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序<br>                 //如果有做过处理,不执行商户的业务程序<br>                 <br>             echo "success";        //请不要修改或删除<br>     <br>             //调试用,写文本函数记录程序运行情况是否正常<br>             logResult("产生了交易记录,但没有付款-{$out_trade_no}\r\n");<br>         }else if($_POST['trade_status'] == 'WAIT_SELLER_SEND_GOODS') {<br>         //该判断表示买家已在支付宝交易管理中产生了交易记录且付款成功,但卖家没有发货<br>         <br>             //判断该笔订单是否在商户网站中已经做过处理<br>                 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序<br>                 //如果有做过处理,不执行商户的业务程序<br>                 $Pay=M('Pay');<br>                 $where['code']=$out_trade_no;<br>                 $where['yes']=0;<br>                 $F=$Pay->where($where)->find();<br>                 if($F){<br>                     //这里是充值成功,这里由你们自己发挥,请勿用我的,我写了函数<br>                     $uid=$F['uid'];<br>                     $score=$F['金额']*20;<br>                     Get_User_Score_Add($uid,$score);<br>                     $Pay->where($where)->setField('yes',1);<br>                     $title='充值梦币!'.$score;<br>                     $body='您在'.date('Y-m-d H:i:s',$F['time']).'<br>充值了'.$score.'梦币<br>如果您对本站有疑问或建议,请联系小曾QQ839024615!';<br>                     Notice_Add(getUserIdUser($uid),$title,$body);<br>                     //这里是充值成功,这里由你们自己发挥,请勿用我的,我写了函数<br>                 }<br>             <br>             echo "success";        //请不要修改或删除<br>     <br>             //调试用,写文本函数记录程序运行情况是否正常<br>             logResult("付款成功-{$out_trade_no}\r\n");<br>         }else if($_POST['trade_status'] == 'WAIT_BUYER_CONFIRM_GOODS') {<br>         //该判断表示卖家已经发了货,但买家还没有做确认收货的操作<br>         <br>             //判断该笔订单是否在商户网站中已经做过处理<br>                 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序<br>                 //如果有做过处理,不执行商户的业务程序<br>                 <br>             echo "success";        //请不要修改或删除<br>     <br>             //调试用,写文本函数记录程序运行情况是否正常<br>             logResult("卖家已经发了货,但买家还没有做确认收货-{$out_trade_no}\r\n");<br>         }else if($_POST['trade_status'] == 'TRADE_FINISHED') {<br>         //该判断表示买家已经确认收货,这笔交易完成<br>         <br>             //判断该笔订单是否在商户网站中已经做过处理<br>                 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序<br>                 //如果有做过处理,不执行商户的业务程序<br>                 <br>             echo "success";        //请不要修改或删除<br>     <br>             //调试用,写文本函数记录程序运行情况是否正常<br>             logResult("买家已经确认收货-{$out_trade_no}\r\n");<br>         } else {<br>             //其他状态判断<br>             echo "success";<br>     <br>             //调试用,写文本函数记录程序运行情况是否正常<br>             logResult ("其他失败-{$out_trade_no}\r\n");<br>         }<br>     }else {<br>         //验证失败<br>         echo "fail";<br>         logResult ("验证失败-{$_POST['out_trade_no']}\r\n");<br>     }    <br>     <br> }<br> <br> <br> //=============================================<br>  //本代码并非完美,也许存在不良之处,高手请多指点,请勿吐槽!<br>  //作者 小曾 Qq839024615 可加我一起交流<br>  //=============================================

AD:真正免费,域名+虚机+企业邮箱=0元

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn