iqianfang / yii2alipay
yii2 支付宝(alipay)即时到帐接口扩展组件
v1.0.0
2016-12-11 09:16 UTC
This package is not auto-updated.
Last update: 2024-09-19 16:04:03 UTC
README
适用于支付宝即时到帐接口,具体使用方法如下:
安装
通过composer安装,在项目目录下运行如下代码:
composer require "iqianfang/yii2alipay:1.0.0"
或者修改composer.json的require部分,添加
"iqianfang/yii2alipay": "1.0.0",
配置使用
一、配置Yii2组件
在common下的全局配置文件main.php中添加组件配置,请参考如下alipay的配置:
'components' => [ 'alipay' => [ 'class' => 'iqianfang\yii2alipay\Alipay', 'config' => [ //↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ //合作身份者ID,签约账号,以2088开头由16位纯数字组成的字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm 'partner' => '2088*****', //收款支付宝账号,以2088开头由16位纯数字组成的字符串,一般情况下收款账号就是签约账号 'seller_id' => '2088*****', // MD5密钥,安全检验码,由数字和字母组成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm 'key' => '', // 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=>123这类自定义参数,必须外网可以正常访问 'notify_url' => 'payment/alipay-asy-notify', // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=>123这类自定义参数,必须外网可以正常访问 'return_url' => "payment/alipay-sy-notify", //签名方式 'sign_type' => strtoupper('MD5'), //字符编码格式 目前支持 gbk 或 utf-8 'input_charset' => strtolower('utf-8'), //ca证书路径地址,用于curl中ssl校验 //'cacert' => getcwd() . '\\cacert.pem', //访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http 'transport' => 'http', // 支付类型 ,无需修改 //'payment_type' => "1", // 产品类型,无需修改 //'service' => "create_direct_pay_by_user", //↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ //↓↓↓↓↓↓↓↓↓↓ 请在这里配置防钓鱼信息,如果没开通防钓鱼功能,为空即可 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ // 防钓鱼时间戳 若要使用请调用类文件submit中的query_timestamp函数 'anti_phishing_key' => "", // 客户端的IP地址 非局域网的外网IP地址,如:221.0.0.1 'exter_invoke_ip' => "", //↑↑↑↑↑↑↑↑↑↑请在这里配置防钓鱼信息,如果没开通防钓鱼功能,为空即可 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ ], ], ],
注意:一些固定配置/不常用配置放到组件类的init里了,有用到的可以去那里改。
二、逻辑处理
1、支付请求提交
在需要发起支付请求的地方调用
Yii::$app->alipay->submit($order);
其中order是你的订单实例,通过它可以获取到订单号
、支付总价
等,如果你的逻辑用不到或者与此不同,请自行修改
2、支付结果通知
根据配置
里设置的控制器及action编写代码。以上面我的配置为例,创建控制器Payment,该控制器用于接受支付宝同步/异步通知,下面两个action分别对应配置中设定的action(我的逻辑比较简单所以处理都放组件了,你的视情况自己看着办):
class PaymentController extends Controller { /** * 关闭csrf,以便异步通知可访问 * @param \yii\base\Action $action * @return bool * @author WangTao <78861190@qq.com> */ public function beforeAction($action) { $this->enableCsrfValidation = false; return parent::beforeAction($action); // TODO: Change the autogenerated stub } /** * 响应异步通知请求 * @author WangTao <78861190@qq.com> */ public function actionAlipayAsyNotify() { Yii::$app->alipay->asyNotify(); } /** * 响应同步通知请求 * @return string * @author WangTao <78861190@qq.com> */ public function actionAlipaySyNotify() { $rs = Yii::$app->alipay->syNotify(); return $this->render('alipay-notify', [ 'rs' => $rs ]); } }
其他
没用curl,直接用了官方demo的现成代码,如果有需要请参考支付宝官方文档再进一步处理即可。 别忘了配置urlManager,开启url美化,否则通知url会有参数,通知会失败