DDR爱好者之家 Design By 杰米

本文实例讲述了php支付宝手机网页支付类。分享给大家供大家参考。具体分析如下:

此处注意:

① 该类是用在Yii框架里面的,没有去掉一些框架的东西。
② 本类不能不做任何修改而使用。

1. PHP代码部分如下:    
复制代码 代码如下:<"/true$/i",$responseTxt) && ($sign == $this->alipay_config['sign']) ) {
            return true;
        } else {
            return false;
        }
    }
    
    /**
     * 解析授权接口返回
     * @param string $content 授权接口返回的文本数据
     * @throws \Exception
     * @return array
     */
    private function parseResponse($content) {
        parse_str($content, $arr);
        $data = isset($arr['res_data']) "sign" || $key == "sign_type" || empty($value)) continue;
            else $para_filter[$key] = $value;
        }
        return $para_filter;
    }
    
    /**
     * 用&拼接字符串,形成URL查询字符串
     *
     * @access private
     * @param array $data
     * @param boolean $is_encode 是否对值做urlencode
     * @return string
     */
    private function createQueryString($data=NULL, $is_encode=false ) {
        $arr = empty($data) "partner=" . $partner . "&notify_id=" . $this->alipay_config['notify_id'];
        $responseTxt = $this->getHttpResponseGET($veryfy_url);
    
        return $responseTxt;
    }
    
    /**
     * 取证书,用于cURL的请求
     *
     * @access private
     * @return string 证书路径
     */
    private function getCr() {
        if( ! empty($this->credential) ) {
            return $this->credential;
        }
        return __DIR__ . DIRECTORY_SEPARATOR .'cacert.pem';
    }
    
    /**
     * 远程获取数据,POST模式
     * 注意:
     * 1.使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"就行了
     * 2.文件夹中cacert.pem是SSL证书请保证其路径有效,目前默认路径是:getcwd().'\\cacert.pem'
     *
     * @param $url 指定URL完整路径地址
     * @param $cacert_url 指定当前工作目录绝对路径
     * @param $para 请求的数据
     * @param $input_charset 编码格式。默认值:空值
     * return 远程输出的数据
     */
    private function getHttpResponsePOST($url, $para, $input_charset = '') {
    
        if (trim($input_charset) != '') {
            $url = $url."_input_charset=".$input_charset;
        }
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL证书认证
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证
        curl_setopt($curl, CURLOPT_CAINFO,$this->getCr());//证书地址
        curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);// 显示输出结果
        curl_setopt($curl, CURLOPT_POST,true); // post传输数据
        curl_setopt($curl, CURLOPT_POSTFIELDS,$para);// post传输数据
        $responseText = curl_exec($curl);
        //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容
        curl_close($curl);
    
        return $responseText;
    }
    
    /**
     * 远程获取数据,GET模式
     * 注意:
     * 1.使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"就行了
     * 2.文件夹中cacert.pem是SSL证书请保证其路径有效,目前默认路径是:getcwd().'\\cacert.pem'
     *
     * @param $url 指定URL完整路径地址
     * @param $cacert_url 指定当前工作目录绝对路径
     * return 远程输出的数据
     */
    private function getHttpResponseGET($url) {
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);// 显示输出结果
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL证书认证
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证
        curl_setopt($curl, CURLOPT_CAINFO,$this->getCr());//证书地址
        $responseText = curl_exec($curl);
        //var_dump( curl_error($curl) );exit;//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容
        curl_close($curl);
    
        return $responseText;
    }
}

2. 使用方法:
复制代码 代码如下://授权接口请求参数
$sum = 0.01; //测试用金额
$req_data = '<direct_trade_create_req><subject>充值</subject>';
$req_data .= '<out_trade_no>'.$orderNo.'</out_trade_no>';
$req_data .= '<total_fee>'.$sum.'</total_fee>';
$req_data .= '<call_back_url>'.Url::toRoute(['payment/return'], true).'</call_back_url>';
$req_data .= '<notify_url>'.Url::toRoute(['payment/notify'], true).'</notify_url>';
$req_data .= '<seller_account_name>'.Yii::$app->params['alipay']['seller_email'].'</seller_account_name>';
$req_data .= '</direct_trade_create_req>';
$params = [
    'service' => 'alipay.wap.trade.create.direct',
    'format' => 'xml',
    'v' => '2.0',
    'partner' => Yii::$app->params['alipay']['partner'], //合作者省份ID
    'req_id' => date('Ymdhis'),
    'sec_id' => Yii::$app->params['alipay']['sign_type'],
    'req_data' => $req_data,
];
 
$alipay = new Alipay();
$alipay->key = Yii::$app->params['alipay']['key'];
$alipay->alipay_config = $params;
$url = $alipay->buildPageUrl();
$this->redirect($url);
3. 配置示例:
复制代码 代码如下://支付宝相关配置
'alipay' => [
        'key' => 'XXXXX',  //交易安全校验码,用于签名的32位密钥
        'transport' => 'https',         //消息验证地址使用访问方式
        'seller_email' => 'XXXX', //卖家支付宝账号,即收款账户
        'service' => 'create_direct_pay_by_user', //接口名称
        'partner' => 'XXXX', //合作者省份ID
        '_input_charset' => 'utf-8', //参数编码字符集
        'sign_type' => 'MD5', //签名方式,不参加签名,目前只能是MD5
        //以下两个参数没用
        'notify_url' => '', //服务器异步通知页面路径
        'return_url' => '', //页面跳转通知页面路径
],

希望本文所述对大家的php程序设计有所帮助。

DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米