zoukankan      html  css  js  c++  java
  • 关于ThinkPHP下微信扫码支付的记录(模式二)

    1.获取二维码

    function get_wx_src(){

    //模式二
    /**
    * 流程:
    * 1、调用统一下单,取得code_url,生成二维码
    * 2、用户扫描二维码,进行支付
    * 3、支付完成之后,微信服务器会通知支付成功
    * 4、在支付成功通知中需要查单确认是否真正支付成功(见:notify.php)
    */
    $out_trade_no = I('post.code');  //系统订单号
    if(C('pay_test_switch')===true) {  //是否开启正式支付
    $total_fee = 1; //付款金额 //必填 通过支付页面的表单进行传递 1fen
    }else{
    $total_fee = I('post.order_last_fee') * 100;
    }
    $attach = "自定义字符串"
    $notify = new NativePay();
    $input = new WxPayUnifiedOrder();
    $input->SetBody('赞赞的商品描述'); //商品简单描述
    $input->SetAttach($attach); //附加数据,可作为自定义参数
    $input->SetOut_trade_no($out_trade_no); //订单号,32个字符内
    $input->SetTotal_fee($total_fee); //订单总金额,单位为分
    $input->SetTime_start(date("YmdHis")); //订单生成时间
    $input->SetTime_expire(date("YmdHis", time() + 600)); //订单失效时间
    $input->SetGoods_tag("test"); //订单优惠标记
    $input->SetNotify_url(C('wxpay_config.notify_url')); //服务器异步通知页面路径)
    $input->SetTrade_type("NATIVE"); //交易类型--扫码支付
    $input->SetProduct_id($out_trade_no); // NATIVE 时必传,商品id
    $result = $notify->GetPayUrl($input);
    $url = $result["code_url"];    //支付Url

    $data['error'] = 0;
    $data['url'] = $url;
    return $this->ajaxReturn($data);

    }

    2.服务器的异步通知方法

    /******************************
    服务器异步通知页面方法

    *******************************/
    /**
    * 验证
    * @return array 返回数组格式的notify数据
    */
    public function notifyurl(){

    // 获取xml
    $xml=file_get_contents('php://input','r');

    // 转成php数组
    $data=$this->toArray($xml);

    if ($data['return_code']=='SUCCESS' && $data['result_code']=='SUCCESS') {  //判断状态是否为返回成功

    $out_trade_no = $data["out_trade_no"];
    $input = new WxPayOrderQuery();
    $input->SetOut_trade_no($out_trade_no);
    $result = WxPayApi::orderQuery($input);  //去微信服务器验证正确性

    if ($result['return_code']=='SUCCESS' && $result['result_code']=='SUCCESS'){  //真正的验证通过
    $result=$data;
    $openid = $data['openid']; //用户标识
    $trade_type = $data['trade_type']; //交易类型 NATIVE
    $total_fee = $data['total_fee']; //订单金额
    $transaction_id = $data['transaction_id']; //微信支付订单号
    $attch = $data['attach']; //自定义信息
    $out_trade_no = $data['out_trade_no']; //订单code
    $time_end= $data['time_end']; //订单code

    $extra_info = explode(',',$attch);
    //add wx

    $parameter = array(  // 存储微信支付信息
    'code' => $out_trade_no,
    'transaction_id' => $transaction_id,
    'openid' => $openid,
    'total_fee' => $total_fee,
    'trade_type' => $trade_type,
    'time_end' => $time_end,
    'create_time' => time()
    );
    }else{
    $result=false;
    }
    }else{
    $result=false;
    }
    // 返回状态给微信服务器
    if ($result) {
    $str='<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
    }else{
    $str='<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[签名失败]]></return_msg></xml>';
    }
    echo $str;

    }

    3.其他方法

    /**
    * 将xml转为array
    * @param string $xml xml字符串
    * @return array 转换得到的数组
    */
    public function toArray($xml){
    //禁止引用外部xml实体
    libxml_disable_entity_loader(true);
    $result= json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
    return $result;
    }

  • 相关阅读:
    轻量级数据库sqlite的使用
    Integer引发的思考
    css限制显示行数
    数据库 chapter 17 数据仓库与联机分析处理技术
    数据库 chapter 15 对象关系数据库系统
    数据库 chapter 16 XML数据库
    数据库 chapter 14 分布式数据库系统
    数据库 chapter 11 并发控制
    数据库 chapter 12 数据库管理系统
    数据库 chapter 13 数据库技术新发展
  • 原文地址:https://www.cnblogs.com/xiledada/p/7390104.html
Copyright © 2011-2022 走看看