ThinkPHP5 implementiert die Alipay-Zahlungsfunktion der App. Haben Sie es gelernt?
专注PHP中高级进阶学习
专注PHP中高级进阶学习 2018-11-29 11:33:12
0
1
1423

Ich habe insgesamt drei Controller verwendet, um diese Alipay-Zahlung durchzuführen:

1: Alipay-Zahlungscontroller.

2: Alipay-Zahlungskonfigurationsparameter-Controller.

3: Alipay-Rückrufadressen-Controller.

Erstellen Sie zunächst einen Alipay-Zahlungscontroller. Dies ist der Controller, den Sie durchlaufen müssen, nachdem Sie auf der vorherigen Seite die Zahlungsmethode ausgewählt und die Zahlung bestätigt haben (hier wird die Alipay-Zahlung ausgewählt). Der Code lautet wie folgt:

<?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;
        }
    }
}

Dann Erstellen Sie einen weiteren Alipay-Controller, schreiben Sie Alipay-Konfigurationsparameter. Der Code lautet wie folgt:

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;
    }
}

Ich lege die Alipay-Zahlungsdemo in das Erweiterungsverzeichnis. Wenn Sie diese Methode zur Implementierung der Alipay-Zahlung verwenden, wird der Inhalt des obigen Alipay-Konfigurationsparameters angezeigt Controller außer Alipay AppID, Alipay öffentlicher Schlüssel, privater Schlüssel, Zahlungsempfängerkontonummer und der Rest können jetzt kopiert werden, und es gibt eine asynchrone Rückrufadresse.

<?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, jetzt ist der Code fertig. Wenn Sie einen Alipay-Zahlungsauftrag ausführen, geben Sie zunächst den Alipay Pay-Controller ein, um die drei von POST übergebenen Parameter, Auftragsnummer, Betrag und Zahlungsmethode, zu erhalten. Schreiben Sie nach Erhalt den Produktnamen, die Produktbeschreibung, die Rückrufadresse usw., instanziieren Sie dann die Alipay-Klasse und rufen Sie die aliPay-Methode in dieser Klasse auf, um die Zahlung durchzuführen. Das Anrufergebnis gibt eine Signatur zurück, die an die App zurückgemeldet wird zur Zahlung. Nach erfolgreicher Zahlung wird ein asynchroner Rückruf ausgeführt, Bestellstatus ändern


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

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

Antworte allen(0)
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!