php 微信 验证码,微信小程序可以用thinkphp的验证码类库captcha来做图形验证码吗...

楼主菜鸡一枚,最近有在学习thinkphp,看到有个图形验证码的类库captcha,故想尝试用在小程序中。

小程序wxml代码如下:

提交

js代码如下:

// pages/test/test.js

Page({

data: {

captchaImage:'https://www.st1207.com/captcha'   //验证码图片地址

},

formsubmit: function (e) {

console.log(e.detail.value);

var that=this;

wx.request({

url: "https://www.st1207.com/api/v3.captcha/index",   //服务器验证地址

method:"GET",

data:e.detail.value,

success: function (res) {

console.log(res.data);

},

fail: function (err) {

console.log(err);

}

})

},

})

服务器代码如下

namespace app\api\controller\v3;

use think\Controller;

use think\captcha\Captcha as Cap;

class Captcha extends  Controller{

public function index($code=''){

$captcha=new Cap;

if(!$captcha->check($code)){

return '验证失败'.$code;

}else{

return '验证成功'.$code;

}

}

}

?>

代码完成,开始测试,虽然验证码可以正常显示,但是提交表单进行验证的时候总是提示验证失败。

7dae5658fa793afb0872d457d2b08c28.png

各种网络搜索查找资料,才发现thinkphp是用Session来储存验证码的。而小程序不支持主动保存cookie,更不会在request header中发送cookie。导致小程序每次向服务器发送请求的时候,SESSIONID都会发生变化,所以永远都不会验证成功。

思考解决办法:手动保存服务器response header中的sessionid,再向服务器发送验证请求的时候,在wx.request中手动添加header:{'cookie':'PHPSESSID=...' }.查看以上代码,小程序第一次向服务器发送请求是在组件加载服务器验证码图片的时候,此时没有办法获得response header。所以也就不能手动保存。

再想办法 :组件的src 不直接使用服务器的图形验证码地址,先在onload事件中通过wx,request或者wx.downloadFile请求服务器https://www.st1207.com/captcha, 获得response header和图片信息再通过js的data 让小程序来显示。

查看wx.request 的回调函数success:function(res){ }

446a8d1b2a21a108b29884690c9e97d8.png

有response header,可以获得sessionID 为  res.header['Set-Cookie'],但是返回的res.data确是一堆乱码,无法来让组件进行显示

查看wx.downloadFile 的回调函数

70b04008a8c5e84c56b05cd78cf129e8.png虽然可以把图片下载下来进行显示,但是并不能获得response header。

作为一名菜鸟,不知道有没有表达的清楚,请各位大神帮忙看看还有没有其他办法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值