首页  >  文章  >  php教程  >  支付宝扫码支付模型 附OpenSSL工具windows编译版本

支付宝扫码支付模型 附OpenSSL工具windows编译版本

WBOY
WBOY原创
2016-06-07 11:36:011192浏览

支付宝扫码支付模型 附OpenSSL工具windows编译版本 ThinkPHP3.2.3
代码只是实现了功能,不是太严谨,比如接收异步通知,没有验证通知是否来自支付宝
支付宝扫码支付<?php <br /> namespace CommonModel;<br> use ThinkModel;<br> <br> /*支付宝扫码支付模型<br>  *author zheng.wang(4995952@qq.com)<br>  *date 2015-12-15<br>  */<br>  <br>  //  ----------------------------------------<br>  //    | 打发士大夫的<br>  //  ----------------------------------------<br>  // | 大法师<br>  //  ----------------------------------------<br> class PayModel extends Model {<br>     private $ali_app_id = '20151210000000000';   //APPID<br>     private $ali_notify_url = 'http://www.19981.com/Home/Notify/aliNotify'; //支付宝结果异步通知<br>     private $wx_notify_url = 'http://www.19981.com/Home/Notify/aliNotify'; //支付宝结果异步通知<br> <br>     <br>     /*支付宝扫码支付<br>      *param $data=array('out_trade_no'=>'订单号','total_amount'=>'商品金额','subject'=>'商品名称','time_expire'=>'支付过期时间');<br>      *author zheng.wang(4995952@qq.com)<br>      *date 2015-12-15<br>      */<br>     public function aliPay($data){<br>         $url = "https://openapi.alipay.com/gateway.do"; //支付宝网关<br>         $params['app_id'] = $this->ali_app_id ; <br>         //biz_content 业务参数需要使用json格式<br>             $biz_content['out_trade_no'] = $data['out_trade_no'];  //网站订单号<br>             $biz_content['total_amount'] =  $data['total_amount']; //订单金额<br>             $biz_content['subject'] = $data['subject'];            //商品名称<br>             $biz_content['time_expire'] = date('Y-m-d H:i:s',$data['time_expire']); //订单过期时间<br>         $params['biz_content'] = json_encode($biz_content);    <br>         // $time_expire = date('Y-m-d H:i:s',$data['time_expire']); //订单过期时间<br>         // $params['biz_content']="{"out_trade_no":"" . $data['out_trade_no'] . "",";<br>         // $params['biz_content'].=""total_amount":"" . $data['total_amount']. "",";<br>         // $params['biz_content'].=""subject":"" . $data['subject'] . "",";<br>         // $params['biz_content'].=""time_expire":"" . $time_expire . ""}";        <br>         $params['charset'] = 'utf-8' ;        <br>         $params['method'] = 'alipay.trade.precreate' ;<br>         $params['notify_url'] =  $this->ali_notify_url ;<br>         $params['sign_type'] = 'RSA' ;<br>        $params['timestamp'] = date('Y-m-d H:i:s',time()) ;<br>         $params['version'] = '1.0';<br>         // 生成签名 A-Z 排序<br>         // $rsaString = 'app_id='.$params['app_id'].'&biz_content='.$params['biz_content'].'&charset='.$params['charset'].'&method='.$ params['method'].'Øify_url='.$params['notify_url'].<br>                 // '&sign_type='.$params['sign_type'].'×tamp='.$params['timestamp'].'&version='.$params['version'];<br>         <br>         $rsaString = $this->getSignContent($params);<br>         $params['sign'] = $this->rsa_sign($rsaString);<br>         //支付请求<br>         $callback = self::sendPostRequst($url, $params);<br>         $callback = json_decode(iconv("GBK", "UTF-8", "$callback"),true); //编码转为utf-8<br>         //返回结果<br>         if($callback['alipay_trade_precreate_response']['code'] == '10000'){<br>             $msg['code'] = 1;<br>             $msg['message'] = $callback['alipay_trade_precreate_response']['msg'];<br>             $msg['qr_code'] = $callback['alipay_trade_precreate_response']['qr_code'];<br>         }其他{<br>             $msg['code'] = 2;<br>             $msg['message'] = $callback['alipay_trade_precreate_response']['sub_msg'];<br>         }<br>         返回 $msg;<br>     }<br>     <br>     /*签名排序*/    <br>     公共函数 getSignContent($params) {<br>         ksort($params);<br>         <br>         $stringToBeSigned = "";<br>         $i = 0;<br>         foreach($params as $k => $v){<br>             if (false === $this->checkEmpty ( $v ) && "@" != substr ( $v, 0, 1 )) {<br>                 如果($i==0){<br>                     $stringToBeSigned.=“$k”。 “=”。 “$v”;<br>                 } 其他 {<br>                     $stringToBeSigned .=“&”。 “$k”。 “=”。 “$v”;<br>                 }<br>                 $i ;<br>             }<br>         }<br>         未设置($k,$v);<br>        返回 $stringToBeSigned;<br>     }    <br> <br>     /*校验$value是否非空*/<br>     公共函数 checkEmpty($value) {<br>         如果(!isset($值))<br>             返回 true;<br>         if ($value === null)<br>             返回 true;<br>         如果(修剪($值)===“”)<br>             返回 true;<br>         <br>         返回 false;<br>     }<br> <br>     /*支付宝rsa签名方法*/<br>     公共函数 rsa_sign($data) {<br>         $private_key = VENDOR_PATH.'Alipay/Key/rsa_private_key.pem'; //私钥路径************************<br>         $priKey = file_get_contents ($private_key);<br>         $res = openssl_get_privatekey ($priKey );<br>         openssl_sign ($data, $sign, $res);<br>         openssl_free_key ( $res );<br>         $sign=base64_encode($sign);<br>         返回 $sign;<br>     }<br> <br>     /*支付宝发送请求*/<br>     公共静态函数 sendPostRequst($url, $data) {<br>         $postdata=http_build_query($data);<br>         //print_r($postdata);<br>         $opts=数组(<br>                 'http' => 数组(<br>                         '方法' => '发布',<br>                         '标题' => '内容类型:application/x-www-form-urlencoded',<br>                         '内容' => $postdata <br>                 ) <br>         );<br>         <br>         <br>         $context=stream_context_create($opts);<br>         <br>         $结果 = file_get_contents($url, false, $context);<br>         返回$结果;<br>     }<br>     <br>     <br>     /*支付宝退款<br>      ¶m $pay_sn(支付宝流水号),$price(退款金额),$batch_no(退款订单号)<br>      *作者 zheng.wang(4995952@qq.com)<br>      *日期 2015-12-15    <br>      */<br>     公共函数 aliRefund($pay_sn,$price,$batch_no){<br>         $url = “https://openapi.alipay.com/gateway.do”;<br>         $params['app_id'] = $this->ali_app_id; <br>             //biz_content业务参数需要使用json格式<br>            // $biz_content['trade_no'] = $pay_sn;  //支付宝订单号<br>             // $biz_content['total_amount'] =  $price; //退款金额<br>             // $biz_content['out_request_no'] = $batch_no; //退款订单号<br>         $params['biz_content'] = $biz_content = "{"trade_no":"". $pay_sn . "","refund_amount":""<br>                                 . $price<br>                                 . "","out_request_no":""<br>                                 . $batch_no<br>                                 . "","refund_reason":"reason","store_id":"store001","terminal_id":"terminal001"}";<br>         $params['charset'] = 'utf-8' ;        <br>         $params['method'] = 'alipay.trade.refund';<br>         $params['sign_type'] = 'RSA' ;<br>         $params['timestamp'] = date('Y-m-d H:i:s',time()) ;<br>         $params['version'] = '1.0' ;<br>         //生成签名<br>         $data = 'app_id='.$params['app_id'].'&biz_content='.$params['biz_content'].'&charset='.$params['charset'].'&method='.$params['method'].<br>         '&sign_type='.$params['sign_type'].'×tamp='.$params['timestamp'].'&version='.$params['version'];<br>         <br>         $params['sign'] = $this->rsa_sign($data);<br>         //支付请求<br>         $callback = self::sendPostRequst($url, $params);<br>         $callback = json_decode(iconv("GBK", "UTF-8", "$callback"),true);        <br>         //退款成功返回结果给<br>         //return $callback;<br>         var_dump($callback);<br>     }    <br>     <br> }支付宝异步通知
没有写通知验证,可以自己写哈<?php <br /> /**<br>  * 由 zheng.wang 创建。<br>  * 日期:2015年10月26日<br>  * 时间:15:29<br>  */<br> <br> namespace HomeController;<br> use ThinkController;<br> <br> class NotifyController extends Controller{<br> <br>     /**<br>      * 支付宝异步通知<br>      * @param unknown $order_sn 订单号<br>      * @param unknown $type 支付类型 ALI/WEIXIN<br>      * @param unknown $result 支付结果      SUCCESS/FAIL<br>      * @param array $data <br>     *              支付成功时  $data['pay_time'] 支付完成时间<br>      *              支付成功时  $data['pay_sn'] 支付流水号<br>      *              <br>      *              支付失败时  $data['pay_time'] 支付完成时间<br>      *              支付失败时  $data['pay_sn'] 支付流水号     <br>      */    <br>     public function aliNotify(){<br>         //接收支付异步通知post数据<br>         $callBackData = $_POST;<br>         //订单记录日志<br>         file_put_contents('./Application/Runtime/Logs/xs_pay_alipay_notify.log', json_encode($callBackData), FILE_APPEND );<br>         if($_POST['trade_status'] == 'TRADE_SUCCESS'){<br>             //支付成功<br>             $data['pay_time'] = strtotime($_POST['gmt_payment']);<br>             $data['pay_sn'] = $_POST['trade_no'];<br>             $res = D('Common/XsOrder')->payCallback($_POST['out_trade_no'], 'ALI', 'SUCCESS', $data);<br>             if($res !== false){<br>                 //处理完完成后通知支付宝<br>                 echo "success";    <br>             }<br>         }<br>     }<br> <br>     <br> }

支付宝扫码支付模型 附OpenSSL工具windows编译版本 thinkphp支付宝扫码支付.zip ( 1.27 MB 下载:45 次 )

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn