suchen

Heim  >  Fragen und Antworten  >  Hauptteil

ThinkPHP5 implementiert die Alipay-Zahlungsfunktion der App. Haben Sie es gelernt?

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中高级进阶学习2221 Tage vor1506

Antworte allen(1)Ich werde antworten

Keine Antwort
  • StornierenAntwort