设为首页 收藏本站
查看: 857|回复: 0

[经验分享] PHP后台支付的开发:微信支付和支付宝支付

[复制链接]

尚未签到

发表于 2017-12-30 07:55:21 | 显示全部楼层 |阅读模式
<?php  

  
/**
  * 微信支付接口调用
  */
  

  
namespace Wine\Controller;
  

  
use Common\Controller\HomebaseController;
  

  
class WxpayController extends HomebaseController {
  

  public function _initialize() {
  parent::_initialize();
  

  Vendor("WxpayAPI/example/log");//订单数据写入日志
  //注: 引入第三方类库中的微信接口文件,对于文件名含有.的,皆用#代替连接才能引入,后缀名不写。
  Vendor("WxpayAPI/example/WxPay#JsApiPay");
  Vendor("WxpayAPI/lib/WxPay#Config");
  Vendor("WxpayAPI/lib/WxPay#Data");
  Vendor("WxpayAPI/lib/WxPay#Exception");
  Vendor("WxpayAPI/lib/WxPay#Notify");
  Vendor("WxpayAPI/lib/WxPay#Api");
  //初始化日志
  $logHandler = new \CLogFileHandler("/projects/wine.huishuocs.com/data/pay_log/" . date('Y-m-d') . '.log');
  $log = \Log::Init($logHandler, 15);
  $this->model = D("Wine/Orders");
  $this->url = MODULE_NAME . '/' . CONTROLLER_NAME . '/index';
  }
  

  /**
  * 显示支付页面
  *
  */
  public function index() {
  // 判断当前订单是否被支付
  $orderid = I("get.o_id", 0, "intval");
  $orderid || $this->error("非法操作!");
  $this->assign('orderid',$orderid);
  $info = $this->model->findone(array("a.id" => $orderid, 'a.status' => array('neq', '-1')));
  $info || $this->error("暂未查询到该订单!");
  //10代表订单待支付的状态
  if ($info['order_status'] != 10) {
  $this->error("订单已支付!");
  }
  //①、获取用户openid
  $tools = new \JsApiPay();
  $openId = $tools->GetOpenid(); #无法使用
  //初始化日志
  \Log::INFO('订单' . var_export($info, true));
  $out_trade_no = \WxPayConfig::MCHID . date("YmdHis");
  $this->model->where(array("id" => $orderid))->save(array('out_trade_no' => $out_trade_no));
  
//        $openId ="123"; #无法使用
  //②、统一下单
  $input = new \WxPayUnifiedOrder();
  $input->SetBody($info['mode_name']);
  $input->SetAttach($orderid);
  $input->SetOut_trade_no($out_trade_no);
  
//        $input->SetTotal_fee($orderArr['total_price']*100);实际支付价格
  $input->SetTotal_fee($info['pay_price']*100); //测试时请将支付价格改为0.01,土豪请避开此注释
  $this->assign('pay_price',$info['pay_price']);
  $input->SetTime_start(date("YmdHis"));
  $input->SetTime_expire(date("YmdHis", time() + 600));
  
//        $input->SetGoods_tag("test");# 优惠券
  $input->SetNotify_url('http://' . $_SERVER['HTTP_HOST'] . "/index.php/Wine/Wxpay/callback"); //回调地址
  $input->SetTrade_type("JSAPI");
  $input->SetOpenid($openId);
  $order = \WxPayApi::unifiedOrder($input);
  
//        echo '<font color="#f00"><b>统一下单支付单信息</b></font><br/>';
  
//        $this->printf_info($order);//打印参数
  $this->assign('o_id',$orderid);
  $this->assign('jsApiParameters', $tools->GetJsApiParameters($order));
  //获取共享收货地址js函数参数
  
//        $this->assign('editAddress', $tools->GetEditAddressParameters());
  $this->display('wxpay');
  exit;
  }
  

  /**
  * 打印输出数组信息
  * @param type $data
  */
  public function printf_info($data) {
  foreach ($data as $key => $value) {
  echo "<font color='#00ff55;'>$key</font> : $value <br/>";
  }
  }
  

  /* 支付成功回调函数 */
  

  public function callback() {
  /* 返回给微信服务器 */
  
//        $mes = array(
  
//            'return_code' => 'SUCCESS',
  
//            'return_msg' => 'OK'
  
//        );
  
//        $this->ajaxReturn($mes, 'XML');
  $logHandler = new \CLogFileHandler("/projects/wine.huishuocs.com/data/pay_log/" . date('Y-m-d') . '.log');
  $log = \Log::Init($logHandler, 15);
  //$streamData = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
  

  $streamData = file_get_contents('php://input');
  if ($streamData != '') {
  $arr = $this->xmlToArray($streamData);
  \Log::INFO('支付' . var_export($arr, true));
  } else {
  $ret = false;
  }
  // 回调值
  if (!empty($arr)) {
  # 数据
  \Log::INFO('数据1' . var_export($arr, true));
  #修改订单状态
  $out_trade_no = $arr['out_trade_no'];
  $newArr = array('order_status' => 11,'status'=>1);
  $this->model->where(array("out_trade_no" => $out_trade_no))->save($newArr);
  $info = $this->model->findone(array("a.out_trade_no" => $out_trade_no, 'a.status' => array('neq', '-1')));
  $sql =  $this->model->getLastSql();
  \Log::INFO('数据2' . $sql);
  #添加支付记录pay
  $pay = array(
  'payment_code' => 'wxpay',
  'trade_no'=>$info['order_code'],
  'out_trade_no'=>$out_trade_no,
  'order_id'=>$info['id'],
  'create_time'=>time()
  );
  M('payment_record')->add($pay);
  }
  

  /* 返回给微信服务器 */
  $mes = array(
  'return_code' => 'SUCCESS',
  'return_msg' => 'OK'
  );
  $this->ajaxReturn($mes, 'XML');
  }
  

  //将XML转为array
  public function xmlToArray($xml) {
  //禁止引用外部xml实体
  libxml_disable_entity_loader(true);
  $values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
  return $values;
  }
  

  
}
  

  
?>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-429581-1-1.html 上篇帖子: PHP渗透中的奇淫技巧 下篇帖子: 【PHP系列】框架的抉择
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表