您好,欢迎访问一九零五行业门户网

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

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
代码部分:    //支付宝支付
    function  alipay_before(){
        $mid = $this->is_login();
        require_once extend_path.'alipay/alipaycore.php';
        require_once extend_path.'alipay/alipayrsa.php';
        $order_id = input(request.order_id);
        if($order_id == 0){
            ajaxmsg('非法数据',0);
        }
        $order_info = db::name(order)->where(id={$order_id})->find();
        //建立请求
        $out_trade_no = $order_info['order_sn'];
        $total_fee = $order_info['total_price'] + $order_info['trans_price'];   //付款金额
        $body = '订单支付';  //商品详情
        $alipay_config = config::get('alipay_config');
        //构造要请求的参数数组,无需改动
        $parameter = array(
            'partner'=>$alipay_config['partner'],//合作者身份id
            'seller_id'=>$alipay_config['seller_id'],
            'out_trade_no'=>$out_trade_no,//商户网站唯一订单号
            'subject'=>'订单支付',//商品名称
            'body'=>$body,//商品详情
            'total_fee'=>$total_fee,
            'notify_url'=>$alipay_config['notify_url'],//服务器异步通知页面路径
            'service'=>$alipay_config['service'],//接口名称
            'payment_type'=>$alipay_config['payment_type'],//支付类型
            '_input_charset'=>$alipay_config['input_charset'],//参数编码字符集
        );
        //将post接收到的数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串。
        $data = createlinkstring($parameter);
//打印待签名字符串。工程目录下的log文件夹中的log.txt。
        logresult($data);
//将待签名字符串使用私钥签名,且做urlencode. 注意:请求到支付宝只需要做一次urlencode.
        $rsa_sign = urlencode(rsasign($data, $alipay_config['private_key']));
//把签名得到的sign和签名类型sign_type拼接在待签名字符串后面。
        $data = $data.'&sign='.''.$rsa_sign.''.'&sign_type='.''.$alipay_config['sign_type'].'';
//返回给客户端,建议在客户端使用私钥对应的公钥做一次验签,保证不是他人传输。
        //echo $data;
        $list['form'] = $data;
        ajaxmsg('ok',1,$list);
    }支付后通知接口:    //支付宝支付通知
    public function alipay_notify_url()
    {
        $alipay_config = config::get('alipay_config');
        //计算得出通知验证结果
        $alipaynotify = new alipaynotify($alipay_config);
        if($alipaynotify->getresponse($_post['notify_id']))//判断成功之后使用getresponse方法判断是否是支付宝发来的异步通知。
        {
            if($alipaynotify->getsignveryfy($_post, $_post['sign'])) {//使用支付宝公钥验签
//——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
                //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
                //商户订单号
                $out_trade_no = $_post['out_trade_no'];
//支付宝交易号
                $trade_no = $_post['trade_no'];
//交易状态
                $trade_status = $_post['trade_status'];
if($_post['trade_status'] == 'trade_finished') {
                    //判断该笔订单是否在商户网站中已经做过处理
                    //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                    //如果有做过处理,不执行商户的业务程序
                    //注意:
                    //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
                    //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
                }
                else if ($_post['trade_status'] == 'trade_success') {
                    $order_info = db::name(order)->where(order_sn='{$out_trade_no}')->find();
                    if($order_info['status'] == 0){
//更新支付状态和支付时间
                        db::name(order)->where(id={$order_info['id']})->save(
                            array(
                                'pay_ways'=>2,
                                pay_sn=>$trade_no,
                                'pay_time'=>time(),
                                'stauts'=>1
                            ));
                        $this->fenxiao_account($out_trade_no);
                    }
                }
                //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
                echo success;        //请不要修改或删除
            }
            else //验证签名失败
            {
                echo sign fail;
            }
        }
        else //验证是否来自支付宝的通知失败
        {
            echo response fail;
        }
    }我写的就是一个标准的下订单的流程,主要是
要能唤醒支付宝客户端,唤醒支付宝是第一步,说明协议,账号,密钥方式都一致。
第二步是要支付成功后接受支付宝的通知,更细自己服务端的数据库。
防止重复更新订单和用户资金账户。
代码我已经贴上去了,把我整合好的源码包直接放到extend目录即可,在controller里面直接调用即可。
注意配置文件要写对,尤其是公钥和私钥的生成方式,注意上传到支付宝平台中心。
技术交流群:495654168
alipay.zip ( 140.02 kb 下载:24 次 )
其它类似信息

推荐信息