tp5支付宝支付调试-徐多蔚项目亲测

一、从支付宝官方下载php版本的支付宝接口,后复制官方文件并修改。

将官方的源码解压到根目录下的extend里 更改名称,将 alipay.trade.page.pay-PHP-UTF-8 更改为 AlipayTradePagePay。

二、修改文件【可忽略】

注:windows下需要修改一个文件,但Linux系统是不需要修改的!

window 系统下需要修改

C:\tp5_alipay2017\extend\AlipayTradePagePay\lotusphp_runtime\Lotus.php 第 61行注释掉;

//trigger_error("invalid [default store dir]: " . $this->defaultStoreDir);

否则会报错 《错误一:[1024]invalid [default store dir]: /tmp/》 !

注释完了再改回来就没事儿了!!

就这么简单?是的:就这么简单!!!!!

三、新建alipay.php,并将下边代码复制进去,放到 application/extra 目录下,

// 支付宝配置文件
return [

        //应用ID,您的APPID。
        'app_id' => "2017091408724714",

        //商户私钥
        'merchant_private_key' => "MIIEowIBAAKCAQEAzuqhx1DejGM6iPyDpAPS09f7E8SlQLMHpH0LxkMeiLfXf471M1N163tUjwAamimE+BDhGRic6T9J05ddY8liQstKEDkUP5ttFlW7yPZSW0PGeb+0fsoAVoUQKDySRM1jkrwPaf4h5AxfsxXCZ+AZ1J3IlLL2a9Z1REmCCfeh2kFCGiCbzowbFIP00XFXzm/hyVa5XFFdg2LHtkMiQhcQd41920LAg16CyainOTA3/DhQjeYTVjWm3mqJS+l7EpCuq+1kIb1AR4CyZHvgYL8OERG9P+s7D60abTHwoGKnsAlh6mOsQnVy5j1TfebsImI20lYElN3LmcRIQ9tV9qwUowIDAQABAoIBAH6bCkoOrV1xCcvv1gxxWnrM2JAL7qFb6f03lhDF2NUGyBEAw/+XvbtMRz0Ibz6M0ROIIHNeoAQH+YBCSZ5ZBoqgIL00b7NLwr+7zZ71OQcmvTaZmjNKHlLSMESua0E1+ws5jqToHoyPFa9aTQ2KDcQOl0CFEEqDelVCNRMsNhh4Y/X5bhR6hnQl75c0sbUlcLTqnHfVTjHc3h2CGXMfiBVE2chbjVDOWmcinO50UVDjScs00iKwPE7MaEieRsqnbrMWtBdR7M2/JGR8zKQaXUd6oitpMERuu44DwdqmkwnnEvoZIWvN6NVvsUPCfdv182yLoDoxUJO+axqGep1dnmECgYEA53HPBGekQZSy9BOP11y/g6wnlNYnFfxcrRnlt++9y3oQLyvGPAG6OIk/f69aDP87Oye2foOEc/wMXpYKtM24w8Bmn1YRQlMXnoo22LUHc8p5s7KbgNXi6UK5yaAAGbdDicrXBw3TJulSSy8Pff14AiKshahUJyapbZeBbdxHe2UCgYEA5N6gEE2ylobCgAGz/Y89XdFsN2Ez+F7jEYfBf4jPonkUGry7LDM46mEduF9pvivEWcTh/nGWrFCaVfzYKhV1q+F0y+hCbLuRO3YpCP4uB9BpwVklKST79kze9jZKAOgvticU9d5M7OU+IqovmKVwh6mqyw+qYzk4iNlwHadGQ2cCgYEAkICYNjHXdjK3QHjuOBJqaHWWCPFkWe/ElTc0HBGNOHuvmyQDkvepIx9eDASZfr/kZVy4LmlCy3+04WFgsd4329BGwnjkMbrbZlr5P3hXfM4QCkgbmubv05+bi+1f4q5vdpq0gmz5RrQqc1Kgo5Mb2Il5mcGtOPyEkC4l20fLQZkCgYAAmcT5xfpuArSH+XkrdTDICkCqdIraYAVgimarmwRQfNjcqRokp43Cr7aQQU/Zu+usAKRHMq0ejqeZCizXD29boB/aWSWze1qKOWkqKOCeDKH6a+15CivPHayIIORY1EMryzZ23rp89K0REjlFwUlmUb+tAMGFuSS41zlAGqxIiQKBgEXu4NyecfEQ2LVZTCeTU2uGHVdLRnXms5hfQh8FFLl2hjJMlsP2Db3P+oRmh49SfUWSoKRI0s0fu1qwJ8JOolvaAP0JTGl8o63vyGzNI/i0qZflwO8BJNLBgsYMHtoKf5xkAazhfytwDSSTp3qWtXcp6Kw9XiEYjOi8jJAXX07L",

        //异步通知地址
        'notify_url' => "http://www.sxqibo.com/demo/alipay.trade.page.pay-PHP-UTF-8/notify_url.php",

        //同步跳转
        'return_url' => "http://www.sxqibo.com/demo/alipay.trade.page.pay-PHP-UTF-8/return_url.php",

        //编码格式
        'charset' => "UTF-8",

        //签名方式
        'sign_type'=>"RSA2",

        //支付宝网关
        'gatewayUrl' => "https://openapi.alipay.com/gateway.do",

        //支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
        'alipay_public_key' => "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhLaUQEpBDnaDfwxpVT3PyM+nkNVozOZvIrK+tGyH0y27EBFsDi/Lqb/Dp7iYJkywFRvITVl/CTF+G8Twz9MjGh/I4LjhaexZMHKXcRr3TfJJNE+ND2uWYN0zRwcUdMeVKd59aBDNBX3ubyDgXxTZeCIAGbfDzpqTwBfYnhmI10NJYgQKay1dCgheBZM9xY5CBaYeDhPAlnWk77DGLRlTXjlaYDKVNqwx8gnMK1Xezfl2g6wAF2cNIotq+kPnwJkEflMCGMvJAe8+Fgi2hNC0tzALgBpB3j6WGVh9H2lfHlI2AxKA8lIAh+bNJWsdOcPvEsC/+xoCn3jMyGi3BuSMgwIDAQAB",

];

在对应的控制器中,创建方法如下:

class Alipay{

    public function index()
    {
        dump(config());exit;
    }
}

确保我们根据url能访问到当前方法,若在输出的内容中,能够搜索到alipay,则说明我们创建的alipay配置文件无误。

调用支付宝配置 config('alipay');

四、关键函数文件

位置:application/index/common.php

关键性函数文件:

<?php
// +----------------------------------------------------------------------
// | NewThink [ Think More,Think Better! ]
// +----------------------------------------------------------------------

//生成唯一订单号
function build_order_no(){
    return date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
}
/**
 * 支付宝 电脑网站支付
 * @auhor hongweizhiyuan
 * @param $out_trade_no     商户订单号
 * @param $subject          订单名称
 * @param $total_amount     订单金额
 * @param $body             商品描述
 * @example alipayPagepay('201791711599526','商品标题','0.01','商品描述');
 */
function alipayPagepay($out_trade_no,$subject,$total_amount,$body)
{

    //step1:获取配置
    import('AlipayTradePagePay.pagepay.service.AlipayTradeService',EXTEND_PATH,'.php');// 加载交易服务类
    $config=config('alipay');
    $aop=new AlipayTradeService($config);

    //step2:加载表单,构造参数
    import('AlipayTradePagePay.pagepay.buildermodel.AlipayTradePagePayContentBuilder',EXTEND_PATH,'.php');  // 支付宝电脑网站支付
    $payRequestBuilder = new AlipayTradePagePayContentBuilder();
    $payRequestBuilder->setBody($body);
    $payRequestBuilder->setSubject($subject);
    $payRequestBuilder->setTotalAmount($total_amount);
    $payRequestBuilder->setOutTradeNo($out_trade_no);

    //step3:创建支付
    $response = $aop->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']);

    //输出表单
    var_dump($response);

}




/**
 * 支付宝 电脑网站 交易查询
 * @param $WIDTQout_trade_no     商户订单号,商户网站订单系统中唯一订单号(请二选一设置)
 * @param $WIDTQtrade_no         支付宝交易号(请二选一设置)
 */
function alipayQuery($WIDTQout_trade_no,$WIDTQtrade_no)
{
    //step1:获取配置
    import('AlipayTradePagePay.pagepay.service.AlipayTradeService',EXTEND_PATH,'.php');// 加载交易服务类
    $config=config('alipay');
    $aop = new AlipayTradeService($config);

    //step2:加载表单,构造参数
    import('AlipayTradePagePay.pagepay.buildermodel.AlipayTradeQueryContentBuilder',EXTEND_PATH,'.php');  // 支付宝电脑网站支付查询接口
    $RequestBuilder = new AlipayTradeQueryContentBuilder();
    $RequestBuilder->setOutTradeNo($WIDTQout_trade_no);
    $RequestBuilder->setTradeNo($WIDTQtrade_no);

    /**
     * alipay.trade.query (统一收单线下交易查询)
     * @param $builder 业务参数,使用buildmodel中的对象生成。
     * @return $response 支付宝返回的信息
     */
    $response = $aop->Query($RequestBuilder);
    var_dump($response);
}

/**
 * 支付宝 电脑网站 退款
 * @param $out_trade_no     商户订单号,商户网站订单系统中唯一订单号(请二选一设置)
 * @param $trade_no         支付宝交易号(请二选一设置)
 * @param $refund_amount    需要退款的金额,该金额不能大于订单金额,必填
 * @param $refund_reason    退款的原因说明
 * @param $out_request_no   标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传
 */
function alipayRefund($out_trade_no,$trade_no,$refund_amount,$refund_reason,$out_request_no)
{
    //step1:获取配置
    import('AlipayTradePagePay.pagepay.service.AlipayTradeService',EXTEND_PATH,'.php');// 加载交易服务类
    $config=config('alipay');
    $aop = new AlipayTradeService($config);

    //step2:加载表单,构造参数
    import('AlipayTradePagePay.pagepay.buildermodel.AlipayTradeRefundContentBuilder',EXTEND_PATH,'.php');  // 支付宝电脑网站支付退款接口
    $RequestBuilder=new AlipayTradeRefundContentBuilder();
    $RequestBuilder->setOutTradeNo($out_trade_no);
    $RequestBuilder->setTradeNo($trade_no);
    $RequestBuilder->setRefundAmount($refund_amount);
    $RequestBuilder->setOutRequestNo($out_request_no);
    $RequestBuilder->setRefundReason($refund_reason);

    /**
     * alipay.trade.refund (统一收单交易退款接口)
     * @param $builder 业务参数,使用buildmodel中的对象生成。
     * @return $response 支付宝返回的信息
     */
    $response = $aop->Refund($RequestBuilder);
    var_dump($response);;
}

/**
 * 支付宝 电脑网站 退款查询
 * @param $out_trade_no         商户订单号,商户网站订单系统中唯一订单号(请二选一设置)
 * @param $trade_no             支付宝交易号(请二选一设置)
 * @param $out_request_no       请求退款接口时,传入的退款请求号,如果在退款请求时未传入,则该值为创建交易时的外部交易号,必填
 */
function alipayRefundQuery($out_trade_no,$trade_no,$out_request_no)
{
    //step1:获取配置
    import('AlipayTradePagePay.pagepay.service.AlipayTradeService',EXTEND_PATH,'.php');// 加载交易服务类
    $config=config('alipay');
    $aop = new AlipayTradeService($config);

    //step2:加载表单,构造参数
    import('AlipayTradePagePay.pagepay.buildermodel.AlipayTradeFastpayRefundQueryContentBuilder',EXTEND_PATH,'.php');  // 支付宝电脑网站 统一收单交易退款查询
    $RequestBuilder=new AlipayTradeFastpayRefundQueryContentBuilder();
    $RequestBuilder->setOutTradeNo($out_trade_no);
    $RequestBuilder->setTradeNo($trade_no);
    $RequestBuilder->setOutRequestNo($out_request_no);

    /**
     * 退款查询   alipay.trade.fastpay.refund.query (统一收单交易退款查询)
     * @param $builder 业务参数,使用buildmodel中的对象生成。
     * @return $response 支付宝返回的信息
     */
    $response = $aop->refundQuery($RequestBuilder);
    var_dump($response);
}

/**
 * 支付宝 电脑网站 交易关闭
 * @param $out_trade_no     商户订单号,商户网站订单系统中唯一订单号(请二选一设置)
 * @param $trade_no         支付宝交易号(请二选一设置)
 */
function alipayClose($out_trade_no,$trade_no)
{
    //step1:获取配置
    import('AlipayTradePagePay.pagepay.service.AlipayTradeService',EXTEND_PATH,'.php');// 加载交易服务类
    $config=C('ALIPAY_CONFIG');
    $aop = new AlipayTradeService($config);

    //step2:加载表单,构造参数
    import('AlipayTradePagePay.pagepay.buildermodel.AlipayTradeCloseContentBuilder',EXTEND_PATH,'.php');  // 支付宝电脑网站 统一收单交易关闭接口
    $RequestBuilder=new AlipayTradeCloseContentBuilder();
    $RequestBuilder->setOutTradeNo($out_trade_no);
    $RequestBuilder->setTradeNo($trade_no);

    /**
     * alipay.trade.close (统一收单交易关闭接口)
     * @param $builder 业务参数,使用buildmodel中的对象生成。
     * @return $response 支付宝返回的信息
     */
    $response = $aop->Close($RequestBuilder);
    var_dump($response);
}

 

 

https://www.kancloud.cn/hongweizhiyuan/thinkphp5-alipay/405842

宝塔面板mysql怎么用mysql-front或者navicat 连接数据库呢

因为不是很习惯phpmyadmin,所以在本地使用了Navicat进行数据库远程连接,但是在连接数据库的时候出现了各种问题。因为从宝塔后台进行登录的时候,是直接进入数据库的,宝塔的phpmyadmin的登录端口是888,然后就在登录的时候将端口改为888,后来尝试登录的时候,数据库账号密码都是正确的,却提示错误信息无法登录。这里大家不要被phpmyadmin的登录端口888所迷惑了,这只是登录phpmyadmin进入数据库的端口,并不是MySQL的端口,MySQL的端口依然是3306,这个时候将Navicat中的端口改为3306即可。

今天想使用mysql-front 连接 宝塔服务器的其中一个虚拟主机的mysql数据库,发现填写信息,端口填写了3306,无法链接,看了很多文章,都是无效,一概而论,对新手误解太大。下面具体就解决步骤。

第一步:打开阿里云服务器ECS,配置安全组放开3306端口。【一般情况下,这个不同操作,因为服务器都默认开启了这个端口】。

第二步:宝塔 找到 安全 这个菜单。开放3306端口。

第三步:宝塔环境->数据库->对应的用户权限,选择全部用户。

最后就可以用此用户开心愉快的链接了。

 

 

layer是一款近年来备受青睐的web弹层组件

layer是一款近年来备受青睐的web弹层组件,她具备全方位的解决方案,致力于服务各水平段的开发人员,您的页面会轻松地拥有丰富友好的操作体验。

在与同类组件的比较中,layer总是能轻易获胜。她尽可能地在以更少的代码展现更强健的功能,且格外注重性能的提升、易用和实用性,正因如此,越来越多的开发者将媚眼投上了layer(已被7890494人次关注)。layer 甚至兼容了包括 IE6 在内的所有主流浏览器。她数量可观的接口,使得您可以自定义太多您需要的风格,每一种弹层模式各具特色,广受欢迎。当然,这种“王婆卖瓜”的陈述听起来总是有点难受,因此你需要进一步了解她是否真的如你所愿。

http://layer.layui.com/

<div id="J_NewAddressBtn">dd</div>
<!--弹窗增加地址-->
<div style="display:none;" id="show_add">
	<div style="padding:20px;">
	
内容
		
		
	
	</div>
</div>

 

<script src="__ROOT__/static/js/layui/layui.js" charset="utf-8"></script>
<script>
//一般直接写在一个js文件中

layui.use(['layer', 'form'], function(){
  var layer = layui.layer
  ,form = layui.form;
  
 // layer.msg('Hello World');
});

//弹出一个页面层,增加内容
  $('#J_NewAddressBtn').on('click', function(){
    layer.open({
      type: 1,
	  title: '增加新地址',
      area: ['600px', '360px'],
      shadeClose: true, //点击遮罩关闭
      content: $("#show_add").html()
    });
  });
</script>

徐多蔚 项目亲测。

mysql获取某个表的所有字段名

mysql安装成功后可以看到已经存在mysql、information_schema和test这个几个数据库,information_schema库中有一个名为COLUMNS的表,这个表中记录了数据库中所有表的字段信息。知道这个表后,获取任意表的字段就只需要一条select语句即可。例如:

select COLUMN_NAME from information_schema.COLUMNS where table_name = 'your_table_name';   (自测有效)

上述的做法有一点问题,如果多个数据库中存在你想要查询的表名,那么查询的结果会包括全部的字段信息。通过DESC information_schema.COLUMNS可以看到该表中列名为TABLE_SCHEMA是记录数据库名,因此下面的写法更为严格

select COLUMN_NAME from information_schema.COLUMNS where table_name = 'your_table_name' and table_schema = 'your_db_name';  

 

ci框架中隐藏index.php入口文件的方法-经典!徐老师亲测经验分享!

网上有很多资料介绍了ci(我当前ci版本[3.1.9])框架下隐藏index.php的方法,但是都不够实用,很多都需要结合修改服务器配置才可以实现!这就太麻烦了!不推荐!

下面我分享的是一个非常经典,有效,安全,可靠的一个方法,直接在ci站点根目录下创建一个.htaccess文件。在文件中输入如下内容:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteRule ^(.*)$ index.php?/$1 [L]   

</IfModule>

大功告成!xuduowei 徐多蔚 亲测无误!你在调试中遇到问题,欢迎随时联系我!

php6及以上版本中微信接口开发$GLOBALS[“HTTP_RAW_POST_DATA”]需要always_populate_raw_post_data=on,这个方法不推荐使用

微信接口开发中的 $GLOBALS[“HTTP_RAW_POST_DATA”],针对php6及以上服务器环境,php.ini中always_populate_raw_post_data默认配置是-1,但是微信接口文件中[$GLOBALS[“HTTP_RAW_POST_DATA”]]需要设置为on。所以默认情况下,接口开发接口信息是有问题的。

有2种解决方法:

1、直接修改php.ini中

always_populate_raw_post_data=on 后重启服务器,这个能解决微信开发问题,但是若我们服务器上有其他项目如:tp3中自动开启session的,就会报错!就会出现类似如下的错误:

session_start(): Cannot send session cache limiter - headers already sent

总结:修改php.ini   always_populate_raw_post_data = On会影响到其他项目;

 

2、不修改服务器配置的前提下,直接修改接口文件用 file_get_contents(“php://input”)  代替$GLOBALS[“HTTP_RAW_POST_DATA”] 即可完美解决。xuduowei 亲测无误!推荐使用!

 

php oop开发中, static::$var 的用法

static::$var 会强制使用当前调用对象所属类中的变量 $var 的值。表现条件:类的继承。

案例一:

class a{
   static protected $test="class a";
   public function static_test(){
     echo static::$test; //class b
     echo self::$test;   //class a
   }
}
class b extends a{
   static protected $test="class b";
}
 
$obj = new b();
$obj->static_test();

案例二:

class par{
    const v='A';
    public function f1()
    {
        echo static::v;//静态绑定static::
    }
    public function f2()
    {
        echo self::v;
    }
}
class child extends par{
    const v='B';
}
$b=new child();
$b->f1();  //result: 'B'
echo '<br>';
$b->f2();  //result: 'A'

 

nginx配置后只有根目录首页index.php能访问,其他页面404

只有首页面根目录可以访问,其他页面地址都是404 not found。网上有很多介绍用url重定向,url重写都试了无效,要不就是重定向过多。其实解决方法很简单:

以phpstudy2016环境组合包为例:

1、打开vhosts.conf;

2、找到对应的域名;

  listen       80;
        server_name  www.xuduowei.com xuduowei.com;
        root   "E:/phpStudy/WWW/xuduowei/public";
        location / {
            #index  index.html index.htm index.php;
            #autoindex  on;
              try_files $uri $uri/ /index.php?$query_string;
                if (!-e $request_filename){  
                   rewrite ^/(.*) /index.php last;  
               }
        }

注意实际增加:

   try_files $uri $uri/ /index.php?$query_string;
                if (!-e $request_filename){  
                   rewrite ^/(.*) /index.php last;  
               }

注意:若是nginx服务器,直接增加如下配置:

    location / {
        if (!-e $request_filename) {
            rewrite  ^(.*)$  /index.php?s=/$1  last;
            break;
        }
    }

提示:若你的vps是虚拟机,要找准虚拟机下对应的配置项!

徐老师项目亲测有效!想学习php开发的,可以联系我。微信:weilanweb 或者15309695130

nginx不支持.htaccess解决办法

其实nginx和.htaccess一点关系都没有只是一大堆人深受apache的影响觉得nginx应该也要支持.htaccess功能。在nginx的配置中直接include .htaccess文件就好

include /站点目录/.htaccess;

多么简单,但是更让人哭笑不得的是有大部分人根本就不知道nginx与apache是两个不同webserver程序,于是不少人这么干:在nginx里include .htaccess文件后,把apache伪静态规则的.htaccess上传到站点根目录下…无语。其实nginx可以include任何文件,而不仅仅是.htaccess。

其实nginx这样引用.htaccess跟apache还是有区别的:

1、nginx是启动引入,因为nginx特别注重效率,所以启动的时候会把所有的配置文件读入内存,然后启动个。如果发现有语法错误,则启动失败。而apache则是动态引入,每次访问站点都会重新载入配置。

2、nginx中的include是手动添加,指定目录。apache已经把.htaccess作为它的一种特色机制,并且支持站所有子目录都可以有.htaccess文件。

根际实际开发经验,很多人在早期都是用虚拟空间的多,而早期的虚拟空间基本都是apache做webserver,所以用户不需要联系空间商就能自己做伪静态,而开源程序更是方便的拓展这一功能(ecshop,wordpress,phpcms等等)。并且维护也方便,只要覆盖.htaccess就好。

其实,没有几个站点经常去修改.htaccess,并且现在基本使用vps居多。

nginx 也可使用 .htaccess 文件实现多种功能。

在 nginx/nginx.conf的server{}中引入 .htaccess 文件:
include /vhosts/quany.info/.htaccess;

参考来源:https://yq.aliyun.com/ziliao/46421