ThinkPHP5 melaksanakan fungsi pembayaran Alipay apl, adakah anda telah mempelajarinya?
专注PHP中高级进阶学习
专注PHP中高级进阶学习 2018-11-29 11:33:12
0
1
1475

Saya menggunakan sejumlah tiga pengawal untuk membuat pembayaran Alipay ini:

1: Pengawal pembayaran Alipay.

2: Pengawal parameter konfigurasi pembayaran Alipay.

3: Pengawal alamat panggilan balik Alipay.

Mula-mula buat pengawal pembayaran Alipay, iaitu pengawal yang perlu anda lalui selepas memilih kaedah pembayaran pada halaman sebelumnya dan mengesahkan pembayaran (pembayaran Alipay dipilih di sini), kodnya adalah seperti berikut:

<?php
namespace app\mobile\controller;
use app\mobile\model\Goods;
use app\mobile\model\OrderGoods;
use think\Controller;
class Pay extends Controller
{
    public function pay_order()
    {
        $res = new OrderGoods();
        //获取订单号
        $where['id'] = input('post.order_sn');
        $reoderSn = input('post.order_sn');
        //查询订单信息
        $order_info = $res->where($where)->find();
        //获取支付方式
        $pay_type = input('post.pay_type');//微信支付 或者支付宝支付
        //获取支付金额
        $money = input('post.totle_sum');
        //判断支付方式
        switch ($pay_type) {
            case 'ali';//如果支付方式为支付宝支付
                //更新支付方式为支付宝
                $type['pay_type'] = 'ali';
                $res->where($where)->update($type);
                //实例化alipay类
                $ali = new Alipay(); 
                //异步回调地址
                $url = 'XXXXXXXXXXXXXXXXXX/Callback/aliPayBack';
                $array = $ali->alipay('商品名称', $money,$reoderSn,  $url);
                if ($array) {
                    return $array;
                } else {
                    echo json_encode(array('status' => 0, 'msg' => '对不起请检查相关参数!@'));
                }
                break;
            case 'wx';
                break;
        }
    }
}

Kemudian buat satu lagi pengawal Alipay, tulis parameter konfigurasi Alipay, kodnya adalah seperti berikut:

class AliPay extends Controller
{
    protected $appId = '';//支付宝AppId
    protected $rsaPrivateKey = '';//支付宝私钥
    protected $aliPayRsaPublicKey = '';//支付宝公钥
    private $seller = '';
    /*
     * 支付宝支付
     */
    public function aliPay($body, $total_amount, $product_code, $notify_url)
    {
        /**
         * 调用支付宝接口。
         */
        /*import('.Alipay.aop.AopClient', '', '.php');
        import('.Alipay.aop.request.AlipayTradeAppPayRequest', '', '.php');*/
        Loader::import('Alipay\aop\AopClient', EXTEND_PATH);
        Loader::import('Alipay\aop\request\AlipayTradeAppPayRequest', EXTEND_PATH);
        $aop = new \AopClient();
        $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
        $aop->appId = $this->appId;
        $aop->rsaPrivateKey = $this->rsaPrivateKey;
        $aop->format = "json";
        $aop->charset = "UTF-8";
        $aop->signType = "RSA2";
        $aop->alipayrsaPublicKey = $this->aliPayRsaPublicKey;
        $request = new \AlipayTradeAppPayRequest();
        $arr['body'] = $body;
        $arr['subject'] = $body;
        $arr['out_trade_no'] = $product_code;
        $arr['timeout_express'] = '30m';
        $arr['total_amount'] = floatval($total_amount);
        $arr['product_code'] = 'QUICK_MSECURITY_PAY';
        $json = json_encode($arr);
        $request->setNotifyUrl($notify_url);
        $request->setBizContent($json);
        $response = $aop->sdkExecute($request);
        return $response;
    }
    function createLinkstring($para)
    {
        $arg = "";
        while (list ($key, $val) = each($para)) {
            $arg .= $key . "=" . $val . "&";
        }
        //去掉最后一个&字符
        $arg = substr($arg, 0, count($arg) - 2);
        //如果存在转义字符,那么去掉转义
        if (get_magic_quotes_gpc()) {
            $arg = stripslashes($arg);
        }
        return $arg;
    }
    function argSort($para)
    {
        ksort($para);
        reset($para);
        return $para;
    }
}

Saya meletakkan demo pembayaran Alipay dalam direktori lanjutan Jika anda menggunakan kaedah ini untuk melaksanakan pembayaran Alipay, kandungan parameter konfigurasi Alipay di atas pengawal kecuali Alipay Appid , kunci awam Alipay, kunci peribadi, nombor akaun penerima dan selebihnya boleh disalin Sekarang dua pengawal telah ditulis, dan terdapat alamat panggilan balik tak segerak.

<?php
namespace app\mobile\controller;
use app\mobile\model\OrderGoods;
use app\mobile\model\IntegralRecord;
use app\admin\model\SystemSettings;
use app\mobile\model\Members;
use think\Controller;
use think\Request;
use think\Db;
class Callback extends Controller
{
    /*
     * 支付宝支付回调修改订单状态
     */
    public function aliPayBack()
    {
        if ($_POST['trade_status'] == 'TRADE_SUCCESS') {//如果支付成功
            //===============修改订单状态===========================//
            $order = new OrderGoods();//实例化
            $orderSn = $_POST['out_trade_no'];//获取订单号
                $where['order_sn'] = $orderSn;
                $data1['type'] = 2;
            $order->where($where)->update($data1);//修改订单状态
            echo 'success';
            exit;
        }
    }
}

OK sekarang kod selesai. Apabila melaksanakan pesanan pembayaran Alipay, masukkan dahulu pengawal Alipay Pay untuk menerima tiga parameter yang diluluskan oleh POST, nombor pesanan, jumlah dan kaedah pembayaran. Selepas menerimanya, tulis nama produk, perihalan produk, alamat panggilan balik, dsb. dan kemudian nyatakan kelas Alipay dan panggil kaedah aliPay dalam kelas ini untuk membuat pembayaran Hasil panggilan mengembalikan tandatangan, yang disalurkan kembali ke apl untuk pembayaran. Selepas pembayaran berjaya, panggilan balik tak segerak dilaksanakan , ubah suai status pesanan


专注PHP中高级进阶学习
专注PHP中高级进阶学习

专注PHP中高级进阶学习,swoole,tp5,laravel等教程分享+VX:PHPopen888

membalas semua(0)
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan