App支付宝支付--PHP处理代码

 

  /*
     *生成APP支付订单信息
     * @param number    uid       用户id
     * @param string    token     用户token
     * @param number    oid       订单id
     * @param string    title     标题
     * @param string    body      商品描述
     * @parma float     money     金额
     * @param number    ordernum  订单编号
     */
    public function zfb_pay()
    {
        $data = input('post.');
        $member = new Member();
        //验证token是否有效 是否过期
      /*  $verify_tn = $member->verify_token($data['uid'],$data['token']);
        if(!$verify_tn){
            return_msg("100","token已失效,请重新登陆!");
        }*/
//        $orderinfo = Db::table('shfw_order')->where('id',$data['oid'])->field('id,ordernum,money')->find();
        Loader::import('/alipay/aop/AopClient',EXTEND_PATH);
        $aop = new \AopClient();
        $aop->appId = config("alipay_app_id");
        $aop->rsaPrivateKey = config('alipay_private_key');
        $aop->alipayrsaPublicKey = config('alipay_public_key');//对应填写
        $aop->signType = "RSA2";
        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
        Loader::import('/alipay/aop/request/AlipayTradeAppPayRequest',EXTEND_PATH);
        $request = new \AlipayTradeAppPayRequest();
        //SDK已经封装掉了公共参数,这里只需要传入业务参数
        $bizcontent = json_encode(array(
            'body' => $data['body'],                    //商品描述
            'subject' => $data['title'],                //支付的标题,
            'out_trade_no' => $data['ordernum'],   //支付宝订单号必须是唯一的,只能生成一次
            'total_amount' => $data['money'],      //金额
            "timeout_express" => "30m",                 //订单支付有效时间 m分钟 h小时
            'product_code' => 'QUICK_MSECURITY_PAY'
        ));
        $request->setNotifyUrl("http://test.111.com/notifyurl");//你在应用那里设置的异步回调地址
        $request->setBizContent($bizcontent);
        //这里和普通的接口调用不同,使用的是sdkExecute
        $response = $aop->sdkExecute($request);
        //htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
        /*   echo htmlspecialchars($response);*///就是orderString 可以直接给客户端请求,无需再做处理。
        if($response){
            return_msg('200','支付宝请求成功!',$response);
        }else{
            return_msg('100','支付请求失败!',$response);
        }
    }

    /*
     * 支付宝支付回调
     */
    public function notifyurl()
    {
        
        Loader::import('/alipay/aop/AopClient',EXTEND_PATH);
        $aop = new \AopClient();
        $aop->alipayrsaPublicKey =config('alipay_public_key');//对应填写
        $flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");
        if ($flag) {
            //校验通知数据的正确性
            $out_trade_no   = $_POST['out_trade_no'];     //商户订单号
            $trade_no       = $_POST['trade_no'];         //支付宝交易号
            $trade_status   = $_POST['trade_status'];     //交易状态trade_status
            $total_amount   = $_POST['total_amount'];     //订单的实际金额
            $order = Db::table("shfw_order")->where('ordernum', $out_trade_no)->find();
            if ($order) {
                //只有交易通知状态为TRADE_SUCCESS或TRADE_FINISHED时,支付宝才会认定为买家付款成功。
                if ($trade_status != 'TRADE_FINISHED' && $trade_status != 'TRADE_SUCCESS') {
                    return 'fail';
                }
                //2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额);
                if ($total_amount != $order['money']) {
                    return 'fail';
                }
                //校验成功后在response中返回success,校验失败返回failure
                $update = array(
                    'status' => '2',      //修改支付状态
                    'zhi_time' => time(), //添加支付时间
                    'pay_type' => 1);     //添加支付类型
                $result = Db::table("shfw_order")->where('ordernum', $out_trade_no)->update($update);
                $res = Db::table("shfw_order")->where('ordernum', $out_trade_no)->field('id,mid,ordernum,nickname,addtime,pay_type')->find();
//                $member = Db::table('shfw_member')->where('id',$res['mid'])->find();
                //添加充值记录
                $res['payorder'] =  $trade_no;
                $res['money'] = $total_amount;
                $addpay = $this->addpay($res);
                if ($result && $addpay) {
                    return "success";
                } else {
                    return 'fail';
                }
            } else {
                exit('fail');
            }
        }
    }

 

posted @ 2018-11-09 20:32  yuancr  阅读(485)  评论(0编辑  收藏  举报