关于小程序 接入 支付宝支付 微信支付

有做过H5的支付 最近在做小程序的支付相关 就趁机来整理一波叭

首先在这里我们使用的是onemipay

先在composer下载如下类包

然后 我们接下来 写微信支付 支付宝支付相关,可以把这些方法封装一下。我们先讲接入微信支付

1:首先具当前小程序的对应的 APP_ID,SECRET,MCH_ID,API_KEY,记得登录商家后台 添加回对应的 授权回调目录

这里先构造支付网关,项目里的H5支付,小程序支付,APP,支付都可以根据此来延伸开。这里目前只有支付宝支付 微信支付两种方式

2:注意 小程序支付使用的是WechatPay_Js支付方式,在这里设置好 app_id ,mch_id _api_key等信息,对啦 再次还有一个微信回调地址 不要忘记设置哦

3:接下来就是支付宝支付,构造对应网关,设置相关信息,因为是在小程序中进行支付宝支付,不能直接跳转到支付宝,所以在这里是生成相应支付链接,到支付宝进行支付。此有一点是 ,由于项目中链接过长(请求参数/用户标识token) ,可进行一次短连接转化,这一部分可放在前端处理,也可以放在后端进行处理,根据项目实际情况来定。

支付接口贴代码

 /**
     * 支付
     * @param Request $request
     */
    public function pay(Request $request)
    {
        if (!$request->has('order_id'))
            return new TheParameterIsEmpty();

        $au_id = $request->get('au_id');

        $orderId = $request->input('order_id');

        $payGenre = $request->input('pay_gateway');

        $WeChat_type = $request->input('WeChat_type', 2);//默认 JSAPI

        $return_url = $request->input('return_url', '');

        $order = ActivityOrder::getActivityOrder($orderId, $au_id);

        if (!$order instanceof ActivityOrder) return response_json(11029, config('code.11029'));

        $ActivityMarketing = ActivityMarket::getActByAmId($order->am_id);

        if (!$ActivityMarketing instanceof ActivityMarket) return response_json(11010, config('code.11010'));

        if ($ActivityMarketing->join_stint != 0 && $ActivityMarketing->join_stint <= $ActivityMarketing->join_stint_num)
            return response_json(11011, config('code.11011'));

        ActivityOrderRepository::setPayGenre($order, $payGenre);

        $gateway = PayGateFactory::getPayGate($payGenre);


        try {
            return $this->getPayParameter($order, $gateway, $return_url ,$WeChat_type);
        } catch (Exception $exception) {
            Log::error($exception);
            return response_json(500, '服务器错误');
        }
    }

    /**
     * @param ActivityOrder $order
     * @param GatewayInterface $gateway
     * @param $return_url //支付宝网页支付成功跳转地址
     * @param $WeChat_type 2:JSAPI 3:H5
     * @return \Illuminate\Http\JsonResponse
     */
    protected function getPayParameter(ActivityOrder $order, GatewayInterface $gateway, $return_url, $WeChat_type)
    {

        $pay_type = $gateway instanceof AliPay ? 'AliPay' : 'WeChatPay';

        $parameter = 1;
        if ($pay_type == 'AliPay'){
            $parameter = 2;//支付宝网页支付
        } elseif ($pay_type == 'WeChatPay') {
            $parameter = $WeChat_type;
        }

        $gateway->getGateway($parameter);

        $gateway->setNotifyUrl('shop-ay/ny');

        if ($pay_type == 'AliPay') $gateway->setReturnUrl($return_url);

        $gateway->setGatewayOrder($order);

//        if ($pay_type == 'WeChatPay') $gateway->setTimeExpire(date('yymdHms', time()+300));

        $data = $gateway->response();

        return response_json($data);
    }

最后如果成功的话 请求返回应该是

注意:前端在对应调微信支付时  字段顺序要后对应后端加密的顺序一致哦 不然会出问题的

好啦 就到此为止啦

猜你喜欢

转载自blog.csdn.net/qq_42082023/article/details/125065018
今日推荐