记一个以前我不知道 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页面就只写样式
当然上面也是能支付OK的,今天突然看到了,想知道前后分离的项目,特别前端是VUE项目的,大家是咋个调用支付的?
推荐文章: