关于微信网页授权redirect_url不跳转

官方文档

链接地址

准备工作

账号设置-功能设置-设置网页授权域名
这里用的是服务号

在这里插入图片描述

示例代码
// 获取code
public function getCode()
{
    $userInfo = session('USER'); // 跳转链接中可以携带参数
    $user_id = $userInfo['id'];
    // 配置微信跳转链接
    $redirect_uri = "http://www.****.com/login/getUserOpenId?user_id=" . $user_id;
    $redirect_uri = urlencode($redirect_uri);

    $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $this->appid . "&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
    header("Location: $url");
    exit();
}

// 这里获取到openid和token,还可以使用token进一步获取用户信息。但是我不需要 就没写
public function getUserOpenId()
{
    // 微信返回的code
    $code = $_GET['code'];
    // 发送curl请求
    $curl = curl_init();
    $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $this->appid . "&secret=" . $this->app_secret . "&code=" . $code . "&grant_type=authorization_code";
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($curl);
    curl_close($curl);

    $json = json_decode($result, true);
    $user_id = $_GET['user_id']; // 这里是微信回调地址,获取不到session,只能通过回调地址传参实现
    $update['openid'] = $json['openid'];
    Db::name('user')->where(['id' => $user_id])->update($update);
    // 返回
    // echo"<script>alert('授权成功!');history.back();window.location.reload()</script>";
}


参考链接

PHP实践:手把手微信公众号网页授权登录功能实现----(也没有参考它,只是这一篇比较详细)

问题
  1. 唤起授权,但是redirect_url没有跳转。

    在配置了网页授权域名后还出现这个问题,那就直接访问一下你的跳转链接就好了。肯定是跳转链接出错了。
    我一开始使用https的链接,但是https证书到期了。一直不知道,也没看到报错。后面索性换成http就可以了。

<think>好的,我现在需要帮助用户解决H5微信支付中如何正确拼接redirect_url参数的问题。首先,我得仔细理解用户的需求。用户提到参考了站内的几个引用内容,这些引用涉及到PHP接入微信H5支付的方法,以及redirect_url参数的处理。用户想知道正确的拼接方法和示例。 首先,我应该回顾微信支付的官方文档,确认redirect_url的作用。根据引用内容,redirect_url用于支付完成后跳转回商户页面,而且这个参数需要是已授权的域名。同时,用户可能需要传递多个参数,但回跳时只会带redirect_url一个参数回来,这可能意味着其他参数需要在跳转前处理好,比如编码到redirect_url中。 接下来,我需要整理拼接步骤。根据引用中的示例,比如引用[4],他们提到在redirect_url中拼接URL Schemes,这可能是在App内处理H5支付的情况。例如,将redirect_url的值设置为包含商户自己域名的URL,并在其中附加参数,同时可能需要处理URL编码的问题。 然后,要注意授权域名的配置。微信支付要求redirect_url的域名必须在商户平台配置的白名单中,否则会被拦截。因此,用户需要确保拼接后的域名部分是正确的,并且已经授权。 另外,参数传递方面,如果商户需要传递多个参数,应该将这些参数先进行URL编码,然后作为redirect_url的一部分。例如,原链接可能是https://example.com/pay/result,但需要附加order_id=123&status=success,那么需要将整个URL编码后作为redirect_url的参数值。 可能还需要考虑同场景下的处理,比如在App内打开H5支付时,如何正确回跳回App。引用[3]提到,redirect_url参数对跳回App起作用,而Referer用于校验。因此,拼接redirect_url时可能需要包含App的URL Scheme,以便支付完成后能够唤醒App。 最后,我需要给出一个具体的示例,展示如何正确拼接redirect_url,包括编码和处理多个参数的步骤。同时,提醒用户常见的问题,比如未授权域名、未编码特殊字符等,可能导致跳转失败。 总结步骤应该是:确定基础URL,拼接参数,进行URL编码,附加到redirect_url参数中,并确保域名已授权。示例中需要展示编码前后的对比,以及代码示例,比如PHP中的处理方式。此外,注意事项部分需要强调授权、编码和参数传递的限制。</think>### H5微信支付redirect_url参数拼接方法 在H5微信支付中,`redirect_url`参数用于支付完成后跳转回商户指定页面。以下是具体实现方法及注意事项: #### 1. 参数拼接规则 - **基础格式**:`redirect_url`需包含商户已授权的域名,且必须进行**URL编码**(UTF-8格式) - **参数传递**:若需携带额外参数,需在基础URL后拼接参数并整体编码 - **App内H5支付**:需在`redirect_url`中嵌入**URL Scheme**实现回跳App(如`myapp://path?key=value`) #### 2. 实现步骤 1. **构造基础URL** 假设原始回跳地址为: ``` https://yourdomain.com/pay_callback?order_id=123&user=test ``` 2. **URL编码处理** 使用`encodeURIComponent`对完整URL进行编码: ```javascript // JavaScript示例 const redirectUrl = encodeURIComponent('https://yourdomain.com/pay_callback?order_id=123&user=test'); ``` 3. **最终拼接格式** 将编码后的URL附加到微信支付接口参数中: ``` https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb? prepay_id=wx2715...& package=XXXX& redirect_url=编码后的URL ``` #### 3. 代码示例(PHP) ```php $baseUrl = "https://yourdomain.com/pay_callback?order_id=123&user=test"; $encodedUrl = urlencode($baseUrl); $mwebUrl = "https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?". "prepay_id={$prepayId}&package={$package}&redirect_url={$encodedUrl}"; ``` #### 4. 注意事项 1. **域名授权** 域名`yourdomain.com`必须在微信商户平台配置授权[^1][^3] 2. **参数限制** 回跳时微信仅返回`redirect_url`原始值,其他参数需自行通过URL拼接携带[^2] 3. **特殊字符处理** 若参数值包含`&`、`=`等符号,需进行**二次编码**: ```php $baseUrl = "https://yourdomain.com/pay?name=user&order"; $encodedUrl = urlencode(urlencode($baseUrl)); // 双重编码 ``` 4. **App内支付** 需在`redirect_url`中插入URL Scheme: ``` https://yourdomain.com/pay_callback?scheme=myapp://pay_result ``` #### 5. 错误排查 | 现象 | 常见原因 | 解决方案 | |------|---------|---------| | 无法跳转 | 未配置授权域名 | 登录商户平台添加域名白名单 | | 参数丢失 | 未正确编码特殊字符 | 使用`encodeURIComponent`双重编码 | | App无法唤醒 | URL Scheme未注册 | 检查Android/iOS应用配置 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值