支付宝 APP支付

 创建充值:

public function createRechargeOrder()
{
        $mobile = $this->request->post('mobile')?$this->request->post('mobile'):0;
        $amount = $this->request->post('amount')?$this->request->post('amount'):0;//充值金额
        $type = $this->request->post('type')?$this->request->post('type'):1;//充值类型
        $subject = $this->request->post('subject')?$this->request->post('subject'):'';//订单名
        $body = $this->request->post('body')?$this->request->post('body'):'';//订单描述
        $channel = $this->request->post('channel')?$this->request->post('channel'):1;//充值渠道:1=支付宝,2=直充
        $username = $this->request->post('nickname')?$this->request->post('nickname'):''; //用户暱称
        if(!$mobile || !$amount || !$username) $this->error("参数错误!");
        //TODO:: 正则判断是否字段值是否为金额
        if($amount < 0.01 || $amount > 30000 || !preg_match('/^(0|[1-9]\d{0,4})(\.\d{1,2})?$/', $amount)) $this->error('订单金额错误');
        if($mobile=='18888888888') {
            $amount=0.01;
        }

        $data['userid'] = 0;
        $data['mobile'] = $mobile;
        $data['amount'] = $amount;
        $data['type'] = $type;
        $data['subject'] = $subject;
        $data['body'] = $body;
        $data['create_time'] = time();
        $data['channel'] = $channel;
        $data['username'] = $username;
        $data['trade_id'] = date("YmdHis").rand(10000,99999);
        $orderCheck = Db::name('recharge_order')->where('trade_id', $data['trade_id'])->find();
        if( $orderCheck ) $data['trade_id'] = date("YmdHis").rand(10000,99999);
        $res = Db::name('recharge_order')->insert($data);
        if(!$res) $this->error('创建订单失败,请重试!');
        //支付宝相关
        $appId = "";
        $rsaPrivateKey = "";
        $alipayrsaPublicKey = "";
        $notifyUrl = "";//回调地址
        
        require_once(VENDOR_PATH . "alipay-sdk-PHP-4.1.0/aop/AopClient.php");
        require_once(VENDOR_PATH . "alipay-sdk-PHP-4.1.0/aop/request/AlipayTradeAppPayRequest.php");
        $aop = new \AopClient();
        $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
        $aop->appId = $appId;//请填写开发者私钥去头去尾去回车,一行字符串
        $aop->rsaPrivateKey = $rsaPrivateKey;//请填写支付宝公钥,一行字符串
        $aop->alipayrsaPublicKey = $alipayrsaPublicKey;
        $aop->apiVersion = '1.0';
        $aop->signType = 'RSA2';
        $aop->postCharset = 'UTF-8';
        $aop->format = 'json';
        $request = new \AlipayTradeAppPayRequest();
        //SDK已经封装掉了公共参数,这里只需要传入业务参数
        $bizcontent = "{\"body\":\"".$data['body']."\","
            . "\"subject\": \"".$data['subject']."\","
            . "\"out_trade_no\": \"".$data['trade_id']."\","
            . "\"timeout_express\": \"2h\","
            . "\"total_amount\": \"".$data['amount']."\","
            . "\"product_code\":\"QUICK_MSECURITY_PAY\""
            . "}";
        $request->setNotifyUrl($notifyUrl);
        $request->setBizContent($bizcontent);
        //这里和普通的接口调用不同,使用的是sdkExecute
        $response = $aop->sdkExecute($request);
        //htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
        $data['string'] = $response;//就是orderString 可以直接给客户端请求,无需再做处理。
        $this->success('', $data);
}

充值回调:

    public function alipayNotify()
    {
        require_once(VENDOR_PATH . "alipay-sdk-PHP-4.1.0/aop/AopClient.php");
        require_once(VENDOR_PATH . "alipay-sdk-PHP-4.1.0/aop/request/AlipayTradeAppPayRequest.php");
        $aop = new \AopClient ();
        $alipayrsaPublicKey = "";//支付宝公钥
        $aop->alipayrsaPublicKey = $alipayrsaPublicKey;
        $aop->rsaCheckV1($_POST, null, "RSA2");
        //记录返回值
        $alipaynotify = fopen("/www/public/alipaynotify.txt", "a");
        fwrite($alipaynotify, "\r\n");
        fwrite($alipaynotify, json_encode($_POST));
        if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
            //TODO 业务处理
            
            echo 'success';

        } else {
            echo 'fail';
        }
        fclose($alipaynotify);
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章