记一个以前我不知道 H5 怎么支付瞎搞的事情,好像现在前端支付的逻辑都是写到了前端的页面里面,不知道这样有没有问题。。。

以前的事情了,那会想写一个H5扫码支付页面,后端用laravel,前端用有赞,当时不知道在前端页面里面怎么嵌入调用支付接口,于是就想到用下面的这样瞎写,当然也是可以支付成的,就是不知道有木有人当时也和我一样这样写。。。也不知道这样做对不对。。。

VUE的入口路由:

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

// 首页,去除路由中的*号
Route::get('/{vue?}', 'H5Controller@index')->where('vue', '[\/\w\.-]*')->where('vue', '^(?!socket$).*$');

然后我在这里写了支付逻辑,不知道当时自己怎么想的,估计我当时想的是任何理由都会经过这里,然后把是支付的路由判断出来调用支付这种想法。。。

<?php

namespace App\Http\Controllers\H5;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class H5Controller extends Controller
{
    /**
     * vue 入口,跳转获取用户openid
     *
     * @param Request $request
     * @param $vue
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     * @throws \Exception
     */
    function index(Request $request, $vue)
    {
        try {
            $query    = $request->getQueryString(); // 获取网站query后缀
            $full_url = $request->fullUrl();
            $openid   = $request->input('open_id');

            myLog('index_one', ['query' => $query, 'vue' => $vue, 'url' => $full_url]);

            // 判断当前路由是不是下单选菜页面
            if ($vue == 'order') {
                if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) { //微信
                    myLog('index_wechat_two', ['query' => $query, 'vue' => $vue, 'url' => $full_url]);

                    if (!$openid) { // 不存在openid
                        // 静默授权,跳转获取 code
                        $original_url = urlencode('http://' . config('app.h5_domain') . '/h5/' . $vue . '?' . $query);

                        myLog('index_wechat_three', ['query' => $query, 'original_url' => $original_url, 'vue' => $vue]);

                        $url = sprintf("https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_base#wechat_redirect",
                            config('pay.wechat.app_id'), urlencode('http://' . config('app.h5_domain') . '/auth/wechat/code/callback?original_url=' . $original_url));

                        Header("Location: $url");

                        exit();
                    } else { // 存在openid 则让通行
                        myLog('index_wechat_four', ['openid' => $openid, 'query' => $query, 'vue' => $vue, 'url' => $full_url]);

                        return view('vue');
                    }
                } elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'AlipayClient') !== false) { // 支付宝
                    myLog('index_ali_two', ['query' => $query, 'vue' => $vue, 'url' => $full_url]);

                    return view('vue');
                } else { // 都不是,暂时测试用
                    myLog('second_none', ['query' => $query, 'vue' => $vue, 'url' => $full_url]);

                    return view('vue');
                }
            } else {
                return view('vue');
            }
        } catch (\Exception $e) {
            myLog('index_error', ['data' => '[' . $e->getLine() . ']' . $e->getMessage()]);
        }
    }
}

记一个以前我瞎折腾的事情。。。关于前后分离微信和支付宝H5支付对接的。。。 = =

像下面的H5页面就只写样式

记一个以前我不知道 H5 怎么支付瞎搞的事情,好像现在前端支付的逻辑都是写到了前端的页面里面,不知道这样有没有问题。。。

当然上面也是能支付OK的,今天突然看到了,想知道前后分离的项目,特别前端是VUE项目的,大家是咋个调用支付的?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

看下支付的接口文档,按照文档来就可以了

3年前 评论
讨论数量: 1

看下支付的接口文档,按照文档来就可以了

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!