银联商务全民付主动扫码phpdemo

<?php
namespace Pay\Controller;
class UmspayController extends PayController
{
    //银联主扫

    /*测试环境:http://58.247.0.18:29015/v1/netpay/bills/get-qrcode
    生产环境:https://api-mop.chinaums.com/v1/netpay/bills/get-qrcode*/
    public function Pay($array)
    {
        header('Content-Type:text/html;charset=utf8');
        $return  = $this->getParameter('聚合支付', $array, __CLASS__, 1);
        $appid='';
        $appKey='';
        $url='http://58.247.0.18:29015/v1/netpay/bills/get-qrcode';
        $token=$this->getToken($appid,$appKey,'http://58.247.0.18:29015');

        $header = array('Content-Type'=>'application/json',"Authorization"=>'OPEN-ACCESS-TOKEN AccessToken='.$token);
        $param=[
            'msgId'=>'1017',    //Y 消息ID    
            'requestTimestamp'=>date("Y-m-d H:i:s"),
            'srcReserve'=>'',   //Y
            'mid'=>'898340149000035',   //商户号
            'tid'=>'38557688',     //终端号
            'instMid'=>'QRPAYDEFAULT',
            'billNo'=>'1017'.$return['orderid'],   //Y 订单号
            'billDate'=>date("Y-m-d"),
            'billDesc'=>'',
            'totalAmount'=>$return['amount']*100,
            'divisionFlag'=>'',
            'platformAmount'=>'',
            'memberId'=>$return['orderid'],
            'notifyUrl'=>$this->_site . 'Pay_Umspay_notifyurl',
            'returnUrl'=>$this->_site . 'Pay_Umspay_callbackurl',
        ];
        ksort($param);
        $str='';
        foreach ($param as $key => $value) {
            if ($value!='') {
                $str.=$key.'='.$value.'&';
            }
        }
        $str=rtrim($str,'&');
        $str=urldecode(http_build_query($param));
        $param['sign']=md5($str.'商户密钥');
        $data=$this->json_post($url,$param,$token);
        $data=json_decode($data);
        if($data->errCode!='SUCCESS'){
            var_dump($data);die;
        }
        $payUrl=$data->billQRCode;
        $payUrl=base64_encode($payUrl);
        $payUrl=$this->_site.'css/wx/wx.php?qrcode='.$payUrl.'&orderid='.$return['orderid'];
        redirect($payUrl);
    }
    function getToken($appId,$appKey,$url){
        if (isset($_COOKIE['token'])) {
            return $_COOKIE['token'];
        }
        $url  = $url."/v1/token/access";
        $nonce = $this->create_uuid();
        $timestamp = date("YmdHis",time());
        $str = $appId.$timestamp.$nonce.$appKey;
        $data = array('appId'=>$appId,'appKey'=>$appKey,'nonce'=>$nonce,'signature'=>sha1($str),'timestamp'=>$timestamp);
        $response = $this->json_post($url,$data);
        $response=json_decode($response,true);
        if($response['errCode']=='0000'){
            $token=$response['accessToken'];
            $expiresIn=$response['expiresIn'];
            setcookie('token',$token,time()+$expiresIn);
            return $token;
        }
        return '获取token失败';
    }

    function  create_uuid($prefix = ""){    //可以指定前缀
        $str = md5(uniqid(mt_rand(), true));
        $uuid  = substr($str,0,8) . '-';
        $uuid .= substr($str,8,4) . '-';
        $uuid .= substr($str,12,4) . '-';
        $uuid .= substr($str,16,4) . '-';
        $uuid .= substr($str,20,12);
        return $prefix . $uuid;
    }

    function json_post($url, $data,$header='')
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        if(!$data){
            return 'data is null';
        }
        if(is_array($data))
        {
            $data = json_encode($data);
        }
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        $array=array(
            'Content-Type: application/json; charset=utf-8',
            'Content-Length:' . strlen($data),
            'Cache-Control: no-cache',
            'Pragma: no-cache'
        );
        if($header!=''){
            array_push($array,'Authorization:OPEN-ACCESS-TOKEN AccessToken='.$header);
        }      
        curl_setopt($curl,CURLOPT_HTTPHEADER,$array);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $res = curl_exec($curl);
        $errorno = curl_errno($curl);
        if ($errorno) {
            return $errorno;
        }
        curl_close($curl);
        return $res;
    }    
    //同步通知
    public function callbackurl()
    {
    $this->EditMoney($_GET['memberId'], 'Umspay', 1);
    
    }
    //异步通知
    public function notifyurl()
    {
        $param=$_POST;
        file_put_contents('./Data/Umspaynotify.txt',"【".date('Y-m-d H:i:s')."】\r\n".json_encode($_POST)."\r\n\r\n",FILE_APPEND);   
        unset($param['sign']);
        ksort($param);
        $str='';
        foreach ($param as $key => $value) {
            if ($value!='') {
                $str.=$key.'='.$value.'&';
            }
        }
        $str=rtrim($str,'&');
        $str=urldecode(http_build_query($param));
        $sign=md5($str.'商户密钥'); 
        if (strtoupper($sign)==$_POST['sign'] && $param['billStatus']=='PAID') {
            $this->EditMoney($param['memberId'], 'Umspay', 0);
            echo 'SUCCESS';
        }else{
            echo $sign;
        }
    }
   
}

相关推荐

发表评论

路人甲

网友评论(0)