PHP【连连支付】用户绑定银行卡

应用场景:

上次介绍的是,对接连连第三方支付,详情请参考《连连支付第三方对接》。使用连连支付,由于第一次去支付,需要进行绑卡操作,这样会导致用户体验不好。因此,需要在个人中心增加绑卡功能。

实现:

    // 匿名用户绑定银行卡
    public function postBindCard()
    {
        $user = $this->user(); // 获取当前登录用户
        $param = $this->request->post();// 获取表单提交参数
        // 表单验证
        if (!$this->validate->scene('bindCard')->check($param)) {
            return $this->renderError($this->validate->getError());
        }
        // 验证银行卡
        if ($this->checkBankCard($param['acctno']) != 'true') {
            return $this->renderError('银行卡参数有误!');
        }
        // 查询该卡是否已经绑定过
        $card_info = Db::name('user_card')->where(['user_id' => $user['user_id'],'acctno' => $param['acctno']])->value("acctno");
        if (!empty($card_info)) {
            return $this->renderError('您已绑定过该银行卡!');
        }
        $llPay = new LianLianPay();
        $result = $llPay->bindCard($param,$user);
        if ($result['status'] == 'succeeded') {
            // 绑定成功
            return $this->renderSuccess($result);
        }
        return $this->renderError($result['msg']);
    }

    // 匿名用户绑卡验证
    public function bindMyCardVerify()
    {
        $user = $this->user();// 获取当前登录用户
        $param = $this->request->post();
        // 表单验证
        if (!$this->validate->scene('bindCardVerify')->check($param)) {
            return $this->renderError($this->validate->getError());
        }
        $llPay = new LianLianPay();
        $result = $llPay->bindCardVerify($param,$user);
        if ($result['status'] == 'succeeded') {
            // 绑定成功
            return $this->renderSuccess($result);
        }
        return $this->renderError($result['msg']);
    }

    /**
     * 检查银行卡号是否正确
     * @param string $cardNumber
     * @return bool
     */
    public function checkBankCard($card_number){
        $arr_no = str_split($card_number);
        $last_n = $arr_no[count($arr_no)-1];
        krsort($arr_no);
        $i = 1;
        $total = 0;
        foreach ($arr_no as $n){
            if($i%2==0){
                $ix = $n*2;
                if($ix>=10){
                    $nx = 1 + ($ix % 10);
                    $total += $nx;
                }else{
                    $total += $ix;
                }
            }else{
                $total += $n;
            }
            $i++;
        }
        $total -= $last_n;
        $x = 10 - ($total % 10);
        if($x == $last_n){
            return 'true';
        }else{
            return 'false';
        }
    }

 LianLianPay.php

<?php
class LianLianPay {
    // 01 用户绑定银行卡
    public function bindCard($param,$user)
    {
        include_once VENDOR_PATH . '/lianlianpay/LLianPayClient.php';
        $time = date('YmdHis',time());
        $seqno = 'YHBK'.$time;
        $notify_url = 'https://test.com/notice.php';
        $parameter = new \stdClass();
        $parameter->timestamp = $time;
        $parameter->oid_partner = $this->payee_id; // 商户号
        $parameter->user_id = $user['user_id'];
        $parameter->txn_seqno = $seqno;
        $parameter->txn_time = $time;
        $parameter->notify_url = $notify_url;
        // 以下几个参数需要加密处理
        $parameter->linked_acctno = LLianPayAccpSignature::publicKeyEncrypt($param['acctno']);
        $parameter->linked_acctname = LLianPayAccpSignature::publicKeyEncrypt($param['acctname']);
        $parameter->linked_phone = LLianPayAccpSignature::publicKeyEncrypt($param['phone']);
        $parameter->id_type = "ID_CARD";
        $parameter->id_no = LLianPayAccpSignature::publicKeyEncrypt($addressInfo['ID_number']);
        $client = new LLianPayClient();
        $gateway_url = 'https://accpapi.lianlianpay.com/v1/acctmgr/bindcard-apply';
        $result = $client->sendRequest($gateway_url,json_encode($parameter));
        if($result['ret_code'] == '0000'){
            $result['status'] = 'succeeded';
        }else{
            $result =  ['status'=>'failed','msg'=>$result['ret_msg']];
        }
        return $result;
    }
    
    // 02 用户绑定银行卡验证
    public function bindCardVerify($param,$user)
    {
        include_once VENDOR_PATH . '/lianlianpay/LLianPayClient.php';
        $time = date('YmdHis',time());
        $notify_url = 'https://test.com/notice.php';
        $parameter = new \stdClass();
        $parameter->timestamp = $time;
        $parameter->oid_partner = $this->payee_id; // 商户号
        $parameter->user_id = $user['user_id'];
        $parameter->txn_seqno = $param['txn_seqno'];
        $parameter->token = $param['token'];
        $parameter->verify_code = $param['verify_code']; // 验证码
        $client = new LLianPayClient();
        $gateway_url = 'https://accpapi.lianlianpay.com/v1/acctmgr/bindcard-verify';
        $result = $client->sendRequest($gateway_url,json_encode($parameter));
        if($result['ret_code'] == '0000'){
            $result['status'] = 'succeeded';
        }else{
            $result =  ['status'=>'failed','msg'=>$result['ret_msg']];
        }
        return $result;
    }
}

接口

总结:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
银行支付失败并提示"该未签约"通常表示您尝试使用的银行没有在相关支付平台上完成签约或关联操作。这可能由以下原因导致: 1. 未完成:您的银行可能尚未与支付平台。在某些支付平台上,您需要先将银行添加到您的账户并完成关联操作,才能进行支付。 2. 银行状态问题:您的银行可能处于冻结、挂失、过期或其他状态,导致无法进行支付。请确保您的银行处于正常可用的状态。 3. 银行限制:有些银行可能对特支付渠道或交易进行限制,例如国际支付、在线支付等。您可以联系发银行咨询是否有相关限制。 4. 支付平台问题:支付平台可能存在技术故障或服务异常,导致无法完成银行签约。您可以尝试稍后再次进行支付或联系支付平台的客服支持团队。 建议您按照以下步骤进行处理: 1. 检查银行状态:确保您的银行处于正常可用状态,并与发银行核实是否有任何限制。 2. 检查支付平台设置:确认您是否已经将银行添加到您的支付平台账户,并完成了签约或关联操作。 3. 尝试其他支付方式:如果您的银行无法完成支付,可以尝试使用其他支付方式,如其他银行、第三方支付平台等。 4. 联系客服支持:如果问题仍然存在,建议您联系支付平台或银行的客服支持团队,向他们提供详细信息并寻求具体的帮助和解决方案。 请注意,为了确保账户安全,不要向任何人透露您的银行信息或支付密码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值