文章只是实现了消费功能。主要的代码清单如下:<?php
/**
* @link http://www.360us.net/
* @author dyllen_zhong@qq.com
*/
class UnionPay
{
/**
* 支付配置
* @var array
*/
public $config = [];
/**
* 支付参数,提交到银联对应接口的所有参数
* @var array
*/
public $params = [];
/**
* 自动提交表单模板
* @var string
*/
private $formTemplate = <<<'HTML'
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>支付</title>
</head>
<body>
<div style="text-align:cen...
这里讲的是微信开放平台移动应用里面的微信支付功能。开放平台的微信支付和公众号的微信支付是不一样的。然后是我下面的代码仅仅是做了基本的消费功能。基本流程如下:1、获取access token。2、提交预支付订单信息,拿到prepayid。3、组成包括prepayid在内的相关信息数据返回给客户端发起支付请求。在提交预支付订单之前需要先获取到access token才行。这个token是公用的有效期是7200秒。具体获取方法可以看下面的WechatAppPay类。去拿这个access token不是凭公众号的appid和secret去拿而是用微信开放平台移动应用的appid和secret去拿的。这里我写了一些个专门做微信支付的操作的类,有需要的可以拿去参考。下面的代码我都实际测试通过了。开放平台文档版本是V1.7。WechatPayBase类,主要就是一些基础公用功能的方法,代码清单如下:<?php
namespace common\services\WechatPay;
/**
* @link http://www.360us.net/
* @author dyllen_zho...
最近把支付宝、银联和微信支付全都做了一遍,目前做的都还只涉及到消费的功能。做下来感觉就是各个平台的支付流程都是大同小异,签名方式也是一样的。这里主要总结一下微信支付公众号支付的一些东西。微信公众号支付的主要流程如下:1、生成我们自己系统的订单。2、调用微信支付的统一下单接口把订单信息推给微信。3、在第二部会返回一个预支付会话标识,然后凭这个标识用JS去调用支付操作。关于支付页面的url问题,微信要求是最后必须要有“/”,我看到很多文章说不适合MVC结构的程序,我的情况是否定的,MVC结构一样可以。比如url是这个:http://www.example.com/payment/wechatpay/ ,url里面payment是controller,wechatpay是action,这有问题吗?一样可以访问,可以支付,是不是一个真正的目录,在微信看来就是,实际上其实不是。好,下面进入正题。微信支付配置如下:$config = [
'mch_id' => '1234455666', //商户号
'signType' => 'MD5', //签名方式,目前只有MD5...
依赖注入英文全称是dependency injection,简称DI。它还有个名字叫控制反转(Inversion of Control),英文简称IOC。这些都是来自于Java的东西。yii的依赖注入器就是一个知道如何去实例化和配置对象及其依赖对象的一个对象。依赖注入yii是通过类yii\di\Container来提供依赖注入特性的。它支持如下种类的依赖注入方式:构造方法注入。Setter和属性注入。回调函数注入。构造方法注入通过构造函数参数类型提示注入。当创建一个新对象的时候,类型提示可以告诉注入器那些类或者接口是它所依赖的,注入器会尝试去得到被依赖类或者接口的实例,然后通过构造函数注入到新的对象里面去。例如:class Foo
{
public function __construct(Bar $bar)
{
}
}
$foo = $container->get('Foo');
// 等价于下面的代码:
$bar = new Bar;
$foo = new Foo($bar);Setter和Property注入 setter和property注入是...
Yii2.0的自带的验证依赖于GD2或者ImageMagick扩展。使用步骤如下:重写yii\web\Controller::actions()方法,用ID"captcha"注册一个CaptchaAction类的action。在表单模型里面添加一个属性,用来保存用户输入的验证码字符串;这个属性的验证器是"captcha"。在视图里面,把yii\captcha\Captcha Widget插入到表单里面。第一步,控制器:在任意controller里面重写方法/**
* @inheritdoc
*/
public function actions()
{
return [
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'maxLength' => 5,
'minLength' => 5
],
];
}第二步,表单模型:假如是一个登陆表单。这里只给出验证码相关的部分...
其实就是Yii2.0的高级应用模板:Advanced Application Template。我们知道默认的高级应用模板包括三个应用:backend - 应用的后台frontend - 应用的前台console - 应用的控制台应用那么如果我们要在增加应用呢?比如在加一个微信的应用,或者我的后台和前台应用的名字我想改一下。那么现在就来再增加一个名字为weixin的子应用。在frontend同目录新建一个名为weixin文件夹然后呢把frontend目录下面的东西全拷贝到weixin目录里面这一步就是修改路径了,修改web目录index.php的包含路径,还有config/main.php的包含路径修改config/main.php配置项controllerNamespace为weixin\controllers最后就是加一个别名了,例子可以看common/bootstrap.php的写法,这里我们不改这个全句文件,当然在这里改也行,我们改weixin/config/bootstrap.php文件。加上Yii::setAlias('weixin', dirname(dirname(__...
基本代码规范本章节包含应该考虑怎样的代码元素规范来确保共享的PHP代码之间有一个较高水平的技术互操作性。本文出现的关键字 "MUST"(务必), "MUST NOT"(不必), "REQUIRED"(要求), "SHALL"(将要), "SHALL NOT"(不应该), "SHOULD"(应当), "SHOULD NOT"(不应当), "RECOMMENDED"(推荐), "MAY"(可能), 和 "OPTIONAL"(可选)在RFC 2119里面有解释。1、概述 1.1、文件务必(MUST)只使用<?php和<?标签。 1.2、PHP代码文件务必(MUST)只使用utf-8无BOM格式编码。 1.3、文件应该(SHOULD)要么声明符号(类,函数,常量等),要么引起副作用(生成输出,改变.ini设置等),不应该(SHOULD NOT)两件事都做(下面有解释)。 1.4、命名空间和类应该(MUST)遵循PSR-0规范。 1.5、类名必须(MUST)用StudlyCaps风格声明。 1.6、类常量必须(MUST)只用大写字母和下划线声明。 1.7、方法名必须(M...
自动加载规范坚持自动加载的互操作性是以下描述的强制性要求。强制性要求1、一个完整的命名空间(namespace)和类(class)必须有以下结构:\<Vendor Name>\(<Namespace>\)*<Class Name>。2、每一个命名空间必须要有一个顶级的namespace("Vendor Name")。3、每一个命名空间可以有无数个子命名空间。4、当从文件系统载入文件的时候,每一个命名空间的分隔符都将被转换成一个DIRECTORY_SEPARATOR(目录分隔符)。5、CLASS NAME里面的每个_字符都会被转换成DIRECTORY_SEPARATOR,在命名空间里面,_没有什么特殊的含义。6、当从文件系统载入文件时,完整的命名空间和类会加上.php后缀。7、供应商(vender)的名字、命名空间名和类名可以是大写或者小写字母的任意组合。例子1、\Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedC...
基于角色的访问控制提供了简单而又功能强大的集中的访问控制。配置RBAC管理器在定义鉴权数据并执行访问检查之前,必须先配置authManager组件。Yii提供了两种鉴权管理器:yii\rbac\PhpManager 和 yii\rbac\DbManager。前者使用一个PHP脚本文件管理鉴权数据,而后者是把数据存储在数据库里面。假如你的应用不需要经常变动的角色和权限管理,你可以考虑前者。下面的代码展示了如何在应用里面配置authManager:return [
// ...
'components' => [
'authManager' => [
'class' => 'yii\rbac\PhpManager', //用文件管理
],
// ...
],
];authManager可以通过\Yii::$app->authManager来访问。提示:yii\rbac\PhpManager默认把RBAC数据存储在@app/data/rbac.php文件里面,你可能需要手动...
鉴权就是验证一个用户是否有足够权限去做一件事的过程。Yii提供了两种鉴权方式:Access Control Filter (ACF,访问控制过滤器)和Role-Based Access Control (RBAC,基于角色的访问控制)。访问控制过滤器(ACF)ACF是一种简单的鉴权方式,是用来做一些简单的访问控制的一种好方法。顾名思义,ACF是作为一个行为(behavior)附加在控制器(controller)或者一个模块(module)上的动作过滤器。ACF会检查一组访问规则,以确认当前用户是否有足够的权限访问动作(action)。以下代码展示了如何去使用ACF:use yii\filters\AccessControl;
class SiteController extends Controller
{
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className()...