绑定银行卡我们需要先去阿里云进行注册:注册流程如下
点击立即购买首次会获得五次免费试用的计会
实现代码如下:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
<div class="qupiao">
<h1>验证个人信息</h1>
<form class="layui-form" action="{:url('sign')}">
<div class="form-group">
<label class="qupiao-ipt-1"> 姓名:</label>
<input id="name" type="text" name="name">
<span class="checkExistRong" id="checkExistname"></span>
</div>
<div class="form-group">
<label class="qupiao-ipt-2">身份证号码:</label>
<input id="identity" type="text" name="idcard" maxlength="18">
<span class="checkExistRong" id="checkExistID"></span>
</div>
<div class="form-group">
<label class="qupiao-ipt-3">手机号号码:</label>
<input id="telephone" type="tel" name="phone" min="11">
<span class="checkExistRong" id="checkExistPhone"></span>
</div>
<div>
<input type="text" name="getcode" placeholder="请输入验证码">
<input type="button" id="getcode" value="免费获取验证码" onclick="settime(this)" />
</div>
<div>
<label>验证码:</label> <input type="text" class="textBox" placeholder="看不清 请点击图片更换"
name="code" id="yzm" placeholder="验证码" />
<img src="{:captcha_src()}" alt="" class="passcode" style="height:43px;cursor:pointer;width: 130px;height: 40px;margin-left: 75px;" onclick="this.src=this.src+'?'">
</div>
<div>
<label class="qupiao-ipt-4">银行卡:</label>
<input type="text" id="t_bankno" name="bank"/>
<input type="button" id="btnCheck" value="check" onclick="CheckBankNo($('#t_bankno'));" />
<span id="banknoInfo"></span>
</div>
银行卡类型
<div>
<input type="text" name="type">
</div>
可用金额
<div>
<input type="text" name="money">
</div>
<button type="submit">提交</button>
</form>
</div>
</body>
</html>
<script>
/*姓名身份证,手机号提交*/
function isChinaName(name) {
var pattern = /^[\u4E00-\u9FA5]{1,6}$/;
return pattern.test(name);
}
// 验证身份证
function isCardNo(card) {
var pattern = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
return pattern.test(card);
}
// 验证手机号
function isPhoneNo(phone) {
var pattern = /^1[34578]\d{9}$/;
return pattern.test(phone);
}
/*用户名判断*/
function userName(inputid, spanid) {
$(inputid).blur(function() {
if ($.trim($(inputid).val()).length == 0) {
$(spanid).html("× 名称没有输入");
} else {
if (isChinaName($.trim($(inputid).val())) == false) {
$(spanid).html("× 名称不合法");
}
}
});
$(inputid).focus(function() {
$(spanid).html("");
});
};
userName('#name', "#checkExistname");
/*身份证判断*/
function userID(inputid, spanid) {
$(inputid).blur(function() {
if ($.trim($(inputid).val()).length == 0) {
$(spanid).html("× 身份证号码没有输入");
} else {
if (isCardNo($.trim($(inputid).val())) == false) {
$(spanid).html("× 身份证号不正确");
}
}
});
$(inputid).focus(function() {
$(spanid).html("");
});
};
userID('#identity', "#checkExistID");
/*手机号判断*/
function userTel(inputid, spanid) {
$(inputid).blur(function() {
if ($.trim($(inputid).val()).length == 0) {
$(spanid).html("× 手机号没有输入");
} else {
if (isPhoneNo($.trim($(inputid).val())) == false) {
$(spanid).html("× 手机号码不正确");
}
}
$(inputid).focus(function() {
$(spanid).html("");
});
});
};
userTel('#telephone', "#checkExistPhone");
//验证银行卡
function CheckBankNo(t_bankno) {
var bankno = $.trim(t_bankno.val());
if(bankno == "") {
$("#banknoInfo").html("请填写银行卡号");
return false;
}
if(bankno.length < 16 || bankno.length > 19) {
$("#banknoInfo").html("银行卡号长度必须在16到19之间");
return false;
}
var num = /^\d*$/; //全数字
if(!num.exec(bankno)) {
$("#banknoInfo").html("银行卡号必须全为数字");
return false;
}
//开头6位
var strBin = "10,18,30,35,37,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,58,60,62,65,68,69,84,87,88,94,95,98,99";
if(strBin.indexOf(bankno.substring(0, 2)) == -1) {
$("#banknoInfo").html("银行卡号开头6位不符合规范");
return false;
}
//Luhm校验(新)
if(!luhmCheck(bankno))
return false;
$("#banknoInfo").html("验证通过!");
return true;
}
//倒计时
var countdown=60;
function settime(val) {
if (countdown == 0) {
val.removeAttribute("disabled");
val.value="免费获取验证码";
countdown = 60;
} else {
val.setAttribute("disabled", true);
val.value="重新发送(" + countdown + ")";
countdown--;
}
setTimeout(function() {
settime(val)
},1000)
}
//点击调用接口获取手机验证码
$('#getcode').click(function () {
var phone=$("#telephone").val();
//console.log(phone)
$.get('getCode',{phone:phone},function (res) {
if (res.code==200){
alert('短信发送成功');
}
if (res.code==500){
alert(res.msg);
return false;
}
})
})
</script>
调用手机号第三方接口
//获取手机验证码
public function getCode(Request $request)
{
//当用户点击手机号时先去缓存中查询,当前时间-缓存时间如果大于60s,允许用户继续获取验证码,否则给出提示
//获取手机号
$phone=$request->param('phone');
//设置当前时间戳
$time=time();
if (Session::has($phone)){
if ($time - Session::get($phone) > 60){
$content="【创信】你的验证码是:5873,3分钟有效!";
$res=$this->sendmsg($phone,$content);
if ($res){
//每次发送验证码成功之后都将当前时间存入缓存,方便下次发送验证码时的时间间隔的判断
Session::set($phone,time());
//将发送成功的手机验证码存入session,当用户进行提交信息入库的时候进最终的验证码验证
Session::set('code',5873);
return json(['code'=>200,'msg'=>'发送成功']);
}else{
return json(['code'=>201,'msg'=>'发送失败']);
}
}else{
return json(['code'=>500,'msg'=>'一分钟后点击发送']);
}
}else{
$content="【创信】你的验证码是:5873,3分钟有效!";
$res=$this->sendmsg($phone,$content);
if ($res){
//发送验证码成功后将当前时间存入缓存,以便下次再次点击的时候进行时间的判断
Session::set($phone,time());
return json(['code'=>200,'msg'=>'发送成功']);
}else{
return json(['code'=>201,'msg'=>'发送失败']);
}
}
}
//使用curl函数库发送请求
public function curl_request($url, $post = true, $params = [], $https = true)
{
//初始化请求
$ch = curl_init($url);
//默认是get请求。如果是post请求 设置请求方式和请求参数
if ($post) {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
}
//如果是https协议,禁止从服务器验证本地证书
if ($https) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}
//发送请求,获取返回结果
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($ch);
//关闭请求
curl_close($ch);
return $res;
}
//使用curl_request函数调用短信接口发送短信
public function sendmsg($phone, $content)
{
// 请求地址、appkey
$gateway = 'https://way.jd.com/chuangxin/dxjk';
$appkey = '56094ca4632daa86455f007d61e3b113';
// https://way.jd.com/chuangxin/dxjk?mobile=*********&content=【创信】你的验证码是:5873,3分钟内有效!&appkey=您申请的APPKEY
$url = $gateway . '?appkey=' . $appkey . "&content=" . $content . "&mobile=" . $phone ;
$res = $this->curl_request($url, false, [], true);
//处理结果
if (!$res) {
return '请求发送失败';
}
//解析结果
$arr = json_decode($res, true);
if (isset($arr['code']) && $arr['code'] == 10000) {
//短信接口调用成功
return true;
} else {
/*if(isset($arr['msg'])){
return $arr['msg'];
}*/
return '短信发送失败';
}
}
银行卡注册
//银行卡注册【添加】
public function sign(Request $request)
{
//接收银行卡号、身份证号、手机号、姓名
$bank=$request->param('bank');
$idcard=$request->param('idcard');
$phone=$request->param('phone');
//进行银行卡注册的时候真实姓名name需要进行urlencode加密
$name=urlencode($request->param('name'));
$host = "https://highbankcard4.shumaidata.com";
$path = "/bankcard4/check/high";
$method = "GET";
$appcode = "feb44067526849b394a06ca13f9c2ca0";
$headers = array();
array_push($headers, "Authorization:APPCODE " . $appcode);
$querys = "bankcard=$bank&idcard=$idcard&mobile=$phone&name=$name";
$bodys = "";
$url = $host . $path . "?" . $querys;
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_FAILONERROR, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
if (1 == strpos("$".$host, "https://"))
{
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
}
//var_dump(curl_exec($curl));
//获取所有数据,进行验证
$param=$request->param();
$validate=$this->validate($param,[
'name'=>'require',
'bank'=>'require',
'idcard'=>'require',
'type'=>'require',
'phone'=>'require',
'money'=>'require',
'code'=>'require|captcha'
]);
if ($validate !==true){
$this->error($validate);
}
//添加
//从缓存中出去验证码进行验证码匹对
$phoneCode=Session::get('code');
//验证码验证
if ($param['getcode'] != $phoneCode){
return json(['code'=>501,'data'=>'','msg'=>'验证码有误']);
}else{
//判断数据表是否有当前手机号
$res=\app\day64\model\Bank::where('bank',$param['bank'])->find();
if ($res){
//将用户当前手机号存入session,便于后期展示当前用户手机号注册过的银行卡列表
Session::set('phone',$res['phone']);
$this->success('当前银行卡已经注册过了','day64/cash/index');
}else{
$obj=new \app\day64\model\Bank();
$obj->allowField(true)->save($param);
//将用户当前手机号存入session,便于后期展示当前用户手机号注册过的银行卡列表
Session::set('phone',$obj['phone']);
$this->success('注册成功','day64/cash/index');
}
}
}