找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1429|回复: 0

tp6,FM支付实例

[复制链接]

304

主题

42

回帖

1348

积分

管理员

积分
1348
发表于 2021-6-5 08:52:17 | 显示全部楼层 |阅读模式
  1. <?php
  2. namespace app\controller;

  3. use app\BaseController;

  4. class Index extends BaseController
  5. {
  6.         public function index()
  7.         {
  8.         return view();
  9.         }
  10.         
  11.         function sign($data_arr) {
  12.         return md5(join('',$data_arr));
  13.         }
  14.         
  15.         public function payto()
  16.         {
  17.         
  18.         # php json方式接收接口返回 自行跳转
  19.         #开发手册:http://docs.nephalem.cn/read/zhifufm/step
  20.         $merchantNum = '1399268136204632064';  # 商户号,  商户后台的用户中心页面查看
  21.         $secret = '207dd2a0b659e99416cdf3cf00695044';     # 商户密钥, 商户后台的用户中心页面查看
  22.         $amount = $_GET['amount']; # 获取充值金额
  23.         $orderNo = '10111111111111119';       # 自己创建的本地订单号
  24.         $api_url = 'http://api-ampr5nnsi7sw.zhifu.fm.it88168.com/api/startOrder';   # 接口地址, 商户后台的用户中心页面查看
  25.         $payType = $_GET['payType'];    # 查看支付接口文档说明payType的取值
  26.         $notifyUrl = 'http://pay.kok.bet/index/callback';   # 修改为您自己用来接收支付成功的公网地址
  27.         $returnUrl = 'http://www.baidu.com'; //'http://xxxx.com/return_url.php';  # 支付成功您想让页面跳转的地址
  28.         $returnType = "json"; //接口返回方式 page为直接跳转到支付页面,不传返回json
  29.         
  30.         $sign = $this ->sign(array($merchantNum, $orderNo, $amount, $notifyUrl, $secret));
  31.         $native = array(
  32.         'merchantNum' => $merchantNum,
  33.         'payType' => $payType,
  34.         'amount' => $amount,
  35.         'orderNo' => $orderNo,
  36.         'notifyUrl' => $notifyUrl,
  37.         'returnUrl' => $returnUrl,
  38.         'sign' => $sign,
  39.         'returnType' => $returnType,
  40.         );
  41.         
  42.         
  43.         
  44.         
  45.         $param = http_build_query($native);
  46.         $return = $this->http_request($api_url, $param, 'application/x-www-form-urlencoded;charset=utf-8');
  47.         //  var_dump($return);die;
  48.         if(strpos($return,'{') === 0){
  49.         $return = json_decode($return, true);
  50.         if($return['success']){
  51.         //json方式展示支付链接有如下几种
  52.         //header("location:".$return['data']['payUrl']);
  53.         header("Refresh:0.1;url=" . $return['data']['payUrl']); //会在0.1秒后执行跳转
  54.         }else{
  55.         echo $return['msg'];
  56.         }
  57.         }else{
  58.         echo "请求异常";
  59.         }
  60.         exit;
  61.         }
  62.         
  63.         
  64.         
  65.         // 发送请求
  66.         function http_request($url, $post_data=array()){
  67.         $curl = curl_init(); // 启动一个CURL会话
  68.         curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
  69.         curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
  70.         curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
  71.         curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); // Post提交的数据包
  72.         curl_setopt($curl, CURLOPT_TIMEOUT, 60); // 设置超时限制防止死循环
  73.         curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
  74.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
  75.         $res = curl_exec($curl); // 执行操作
  76.         return $res;
  77.         }
  78.         
  79.         public function callback(){
  80.         /**
  81.         * md5(付款成功状态state的值+商户号merchantNum的值+商户订单号orderNo的值+订单金额amount的值+商户秘钥)
  82.         * +表示字符串拼接
  83.         */
  84.         $merchantNum = '1399268136204632064';  # 商户号,  商户后台的用户中心页面查看
  85.         $secret = '207dd2a0b659e99416cdf3cf00695044';     # 商户密钥, 商户后台的用户中心页面查看
  86.         
  87.         $this->write_log($_GET);
  88.         $sign = $this->sign(array($_GET['state'], $merchantNum, $_GET['orderNo'], $_GET['amount'], $secret));
  89.         
  90.         # 对比签名
  91.         //write_log('sign'.$sign);
  92.         if($merchantNum==$_GET['merchantNum'] && $sign == $_GET['sign']) {
  93.         # do something update database
  94.         $this->write_log('我要返回success啦');
  95.         echo 'success';
  96.         } else {
  97.         $this->write_log('我签名没通过啊');
  98.         echo 'fail';
  99.         exit();
  100.         };
  101.         }
  102.         
  103.         
  104.         public function write_log($data){
  105.         $years = date('Y-m');
  106.         //设置路径目录信息
  107.         $url = './zhifufm/'.$years.'/'.date('Ymd').'_request_log.txt';  
  108.         $dir_name=dirname($url);
  109.         //目录不存在就创建
  110.         if(!file_exists($dir_name))
  111.         {
  112.         //iconv防止中文名乱码
  113.         $res = mkdir(iconv("UTF-8", "GBK", $dir_name),0777,true);
  114.         }
  115.         $fp = fopen($url,"a");//打开文件资源通道 不存在则自动创建      
  116.         fwrite($fp,date("[Y-m-d H:i:s] ").var_export($data,true)."\r\n");//写入文件
  117.         fclose($fp);//关闭资源通道
  118.         }   


  119. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|外汇论坛 ( 粤ICP备16021788号 )

GMT+8, 2024-12-22 21:35 , Processed in 0.073732 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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