ThinkPHP5 implémente la fonction de paiement de l'application Alipay, l'avez-vous appris ?
专注PHP中高级进阶学习
专注PHP中高级进阶学习 2018-11-29 11:33:12
0
1
1494

J'ai utilisé un total de trois contrôleurs pour effectuer ce paiement Alipay :

1 : Contrôleur de paiement Alipay.

2 : Contrôleur des paramètres de configuration du paiement Alipay.

3 : Contrôleur d'adresse de rappel Alipay.

Créez d'abord un contrôleur de paiement Alipay, qui est le contrôleur par lequel vous devez passer après avoir sélectionné le mode de paiement sur la page précédente et confirmé le paiement (le paiement Alipay est sélectionné ici. Le code est le suivant :

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

Ensuite). créez un autre contrôleur Alipay, écrivez les paramètres de configuration Alipay, le code est le suivant :

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

J'ai mis la démo de paiement Alipay dans le répertoire d'extension Si vous utilisez cette méthode pour implémenter le paiement Alipay, le contenu du paramètre de configuration Alipay ci-dessus. contrôleur sauf Alipay Appid, la clé publique Alipay, la clé privée, le numéro de compte du bénéficiaire et le reste peuvent être copiés. Maintenant, deux contrôleurs ont été écrits et il existe une adresse de rappel asynchrone.

<?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 maintenant le code est terminé. Lors de l'exécution d'un ordre de paiement Alipay, entrez d'abord dans le contrôleur Alipay Pay pour recevoir les trois paramètres transmis par POST, le numéro de commande, le montant et le mode de paiement. Après l'avoir reçu, écrivez le nom du produit, la description du produit, l'adresse de rappel, etc., puis instanciez la classe Alipay et appelez la méthode aliPay dans cette classe pour effectuer le paiement. Le résultat de l'appel renvoie une signature, qui est renvoyée à l'application. pour le paiement. Une fois le paiement réussi, un rappel asynchrone est exécuté, modifiez le statut de la commande


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

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

répondre à tous(0)
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal