PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > ThinkPhp教程 > 正文

    ThinkPHP5.0整合支付宝移动支付接口类

    作者:admin来源:网络浏览:时间:2020-09-30 00:07:50我要评论
    导读:thinkphp5.0整合支付宝支付,thinkphp5.0整合微信支付,移动app支付thinkphp5.0整合支付宝移动支付代码功能 实现app接入支付宝支付时,如...
    thinkphp5.0整合支付宝支付,thinkphp5.0整合微信支付,移动app支付
    thinkphp5.0整合支付宝移动支付代码功能 实现

    app接入支付宝支付时,如果用户手机没有安装支付宝客户端,则会调用支付宝的移动支付h5页面。
    如果安装了支付宝支付,则会唤醒支付宝客户端进行支付,用户提现最佳。

    支付宝文档地址:
    https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7386797.0.0.Y4jDIe&treeId=59&articleId=103563&docType=1

    所有的数据都在服务端进行组合,最后返回给客户端一个处理后的字符串。
    生成的标准的字符串有提供:

    partner="2088101568358171"&seller_id="xxx@alipay.com"&out_trade_no="0819145412-6177"&subject="测试"&body="测试测试"&total_fee="0.01"¬ify_url="http://notify.msp.hk/notify.htm"&service="mobile.securitypay.pay"&payment_type="1"&_input_charset="utf-8"&it_b_pay="30m"&sign="lBBK%2F0w5LOajrMrji7DUgEqNjIhQbidR13GovA5r3TgIbNqv231yC1NksLdw%2Ba3JnfHXoXuet6XNNHtn7VE%2BeCoRO1O%2BR1KugLrQEZMtG5jmJIe2pbjm%2F3kb%2FuGkpG%2BwYQYI51%2BhA3YBbvZHVQBYveBqK%2Bh8mUyb7GM1HxWs9k4%3D"&sign_type="RSA"


    ThinkPHP5.0整合支付宝移动支付接口类ThinkPHP5.0整合支付宝移动支付接口类ThinkPHP5.0整合支付宝移动支付接口类
    ThinkPHP5.0整合支付宝移动支付接口类
    1. //支付宝支付
    2. function  alipay_before(){ 
    3.     $mid = $this->is_login(); 
    4.     require_once EXTEND_PATH.'Alipay/alipaycore.php'
    5.     require_once EXTEND_PATH.'Alipay/alipayrsa.php'
    6.     $order_id = input("request.order_id"); 
    7.     if($order_id == 0){ 
    8.         ajaxmsg('非法数据',0); 
    9.     } 
    10.     $order_info = Db::name("order")->where("id={$order_id}")->find(); 
    11.     //建立请求
    12.     $out_trade_no = $order_info['order_sn']; 
    13.     $total_fee = $order_info['total_price'] + $order_info['trans_price'];   //付款金额
    14.     $body = '订单支付';  //商品详情
    15.     $alipay_config = Config::get('alipay_config'); 
    16.     //构造要请求的参数数组,无需改动
    17.     $parameter = array( 
    18.         'partner'=>$alipay_config['partner'],//合作者身份ID
    19.         'seller_id'=>$alipay_config['seller_id'], 
    20.         'out_trade_no'=>$out_trade_no,//商户网站唯一订单号
    21.         'subject'=>'订单支付',//商品名称
    22.         'body'=>$body,//商品详情
    23.         'total_fee'=>$total_fee, 
    24.         'notify_url'=>$alipay_config['notify_url'],//服务器异步通知页面路径
    25.         'service'=>$alipay_config['service'],//接口名称
    26.         'payment_type'=>$alipay_config['payment_type'],//支付类型
    27.         '_input_charset'=>$alipay_config['input_charset'],//参数编码字符集
    28.     ); 
    29.     //将post接收到的数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串。
    30.     $data = createLinkstring($parameter); 
    31.  
    32.     //打印待签名字符串。工程目录下的log文件夹中的log.txt。
    33.     logResult($data); 
    34.  
    35.     //将待签名字符串使用私钥签名,且做urlencode. 注意:请求到支付宝只需要做一次urlencode.
    36.     $rsa_sign = urlencode(rsaSign($data, $alipay_config['private_key'])); 
    37.  
    38.     //把签名得到的sign和签名类型sign_type拼接在待签名字符串后面。
    39.     $data = $data.'&sign='.'"'.$rsa_sign.'"'.'&sign_type='.'"'.$alipay_config['sign_type'].'"'
    40.  
    41.     //返回给客户端,建议在客户端使用私钥对应的公钥做一次验签,保证不是他人传输。
    42.     //echo $data;
    43.     $list['form'] = $data; 
    44.     ajaxmsg('ok',1,$list); 
    支付后通知接口:

    1. //支付宝支付通知
    2. public function alipay_notify_url() 
    3.     $alipay_config = Config::get('alipay_config'); 
    4.     //计算得出通知验证结果
    5.     $alipayNotify = new Alipaynotify($alipay_config); 
    6.     if($alipayNotify->getResponse($_POST['notify_id']))//判断成功之后使用getResponse方法判断是否是支付宝发来的异步通知。
    7.     { 
    8.         if($alipayNotify->getSignVeryfy($_POST, $_POST['sign'])) {//使用支付宝公钥验签
    9.  
    10.             //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
    11.             //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
    12.             //商户订单号
    13.             $out_trade_no = $_POST['out_trade_no']; 
    14.  
    15.             //支付宝交易号
    16.             $trade_no = $_POST['trade_no']; 
    17.  
    18.             //交易状态
    19.             $trade_status = $_POST['trade_status']; 
    20.  
    21.             if($_POST['trade_status'] == 'TRADE_FINISHED') { 
    22.                 //判断该笔订单是否在商户网站中已经做过处理
    23.                 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
    24.                 //如果有做过处理,不执行商户的业务程序
    25.                 //注意:
    26.                 //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
    27.                 //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
    28.             } 
    29.             else if ($_POST['trade_status'] == 'TRADE_SUCCESS') { 
    30.                 $order_info = Db::name("order")->where("order_sn='{$out_trade_no}'")->find(); 
    31.                 if($order_info['status'] == 0){ 
    32.  
    33.                     //更新支付状态和支付时间
    34.                     Db::name("order")->where("id={$order_info['id']}")->save( 
    35.                         array( 
    36.                             'pay_ways'=>2, 
    37.                             "pay_sn"=>$trade_no, 
    38.                             'pay_time'=>time(), 
    39.                             'stauts'=>1 
    40.                         )); 
    41.                     $this->fenxiao_account($out_trade_no); 
    42.                 } 
    43.             } 
    44.             //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
    45.             echo "success";        //请不要修改或删除
    46.         } 
    47.         else //验证签名失败
    48.         { 
    49.             echo "sign fail"
    50.         } 
    51.     } 
    52.     else //验证是否来自支付宝的通知失败
    53.     { 
    54.         echo "response fail"
    55.     } 
    56.  
    Alipay.zip
    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-83-5363-1.html