php支付宝wap接口,呕心之作:支付宝的手机网站支付接口的应用,呕心之作_PHP教程...
php⽀付宝wap接⼝,呕⼼之作:⽀付宝的⼿机⽹站⽀付接⼝的
应⽤,呕⼼之作_PHP教程...
呕⼼之作:⽀付宝的⼿机⽹站⽀付接⼝的应⽤,呕⼼之作
由于去年做⼿机Portl接⼝的⼯作,需要使⽤⽀付宝的⽀付,于是⼿机⽹站⽀付接⼝就成了⾸选。
1.⾸先下载接⼝包
解压下载的⽂件可以看到⽂件夹的结构如下图:
我使⽤的是RSA签名⽅式,PHP-UTF-8的⽂件夹
<的⽂档说明
爱新觉罗 恒馨
红⾊字体的⽂件是最重要的⽂件,也是必需的!
火炬之光加点├lib┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈类⽂件夹
│ │
│ ├alipay_core.function.php ┈┈┈┈┈┈⽀付宝接⼝公⽤函数⽂件
│ │
│ ├alipay_notify.class.php┈┈┈┈┈┈┈⽀付宝通知处理类⽂件
│ │
│ ├alipay_submit.class.php┈┈┈┈┈┈┈⽀付宝各接⼝请求提交类⽂件
│ │
│ └alipay_rsa.function.php┈┈┈┈┈┈┈⽀付宝接⼝RSA函数⽂件
├┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈⽇志⽂件
├fig.php┈┈┈┈┈┈┈┈┈┈┈┈基础配置类⽂件
├alipayapi.php┈┈┈┈┈┈┈┈┈┈┈┈┈┈⽀付宝接⼝⼊⼝⽂件
├notify_url.php ┈┈┈┈┈┈┈┈┈┈┈┈┈服务器异步通知页⾯⽂件
├return_url.php ┈┈┈┈┈┈┈┈┈┈┈┈┈页⾯跳转同步通知⽂件
├key┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈私钥公钥⽂件夹(⽤法见下⽅※注意※)
│ │
│ ├rsa_private_key.pem┈┈┈┈┈┈┈┈┈商户的私钥⽂件
│ │
│ └alipay_public_key.pem┈┈┈┈┈┈┈┈⽀付宝的公钥⽂件
├openssl┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈缺省dll⽂件(⽤法见下⽅※注意※)
│ │
│ ├libeay32.dll
│ │
│ ├ssleay32.dll
│ │
│ └php_openssl.dll
├cacert.pem ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈⽤于CURL中校验SSL的CA证书⽂件
└ ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈使⽤说明⽂本
3. 把必需的⽂件整合到框架⾥(我当时⽤的是thinkPHP框架)
(1)在
⾥新建⼀个⽂件夹叫AliMobilePay,
把上图⾥的4个⽂件拷贝到AliMobilePay⽂件夹⾥,
对以上⽂件进⾏重命名,
电气自动化专业
alipay_core.function.php重命名为:Corefunction.php
alipay_notify.class.php重命名为:Notify.php
alipay_rsa.function.php重命名为:Rsafunction.php
alipay_submit.class.php重命名为:Submit.php
打开Notify.php,去掉⼀下代码,
require_once("alipay_core.function.php");
require_once("alipay_rsa.function.php");
同样的道理去掉其他3个⽂件⾥的包含⽂件。
(2)在根⽬录下建⽴⼀个⽂件夹key
在key⽂件夹⾥放⼊商户的私钥⽂件、⽀付宝的公钥⽂件、CA证书⽂件
◆商户的私钥
1、不需要对刚⽣成的(原始的)私钥做pkcs8编码
2、不需要去掉去掉“-----BEGIN RSA PRIVATE KEY-----”、“-----END RSA PRIVATE KEY-----”
简⾔之,只要维持⽤openssl⼯具刚⽣成出来的私钥的内容即可。
◆⽀付宝公钥
1、须保留“-----BEGIN PUBLIC KEY-----”、“-----END PUBLIC KEY-----”这两条⽂字。简⾔之,⽀付宝公钥只需要维持demo⾥的原样即可。
(3)alipay_config.php 配置⽂件
把alipay_config.php 配置⽂件整合到thinkPHP框架的配置⽂件⾥
php/**
* Created by PhpStorm.
六不准的内容是什么* User: zhangxiaoliu
* Date: 16/4/15
* Time: 上午10:39*/
'partner' => '2088XXXXXXXXXXXX',
//收款⽀付宝账号,与partner的值⼀样
'seller_id' => '2088XXXXXXXXXXXX',
//商户的私钥(后缀是.pem)⽂件相对路径
'private_key_path'=> NEW_PORTAL_DOMAIN.'key/rsa_private_key.pem',
//⽀付宝公钥(后缀是.pem)⽂件相对路径
'ali_public_key_path'=> NEW_PORTAL_DOMAIN.'key/alipay_public_key.pem',
//签名⽅式 不需修改
'sign_type' => strtoupper('RSA'),
//字符编码格式 ⽬前⽀持 gbk 或 utf-8
'input_charset'=> 'utf-8',
//ca证书路径地址,⽤于curl中ssl校验
'cacert' => NEW_PORTAL_DOMAIN.'key/cacert.pem',
//访问模式,根据⾃⼰的服务器是否⽀持ssl访问,若⽀持请选择https;若不⽀持请选择http 'transport' => 'http',
//这⾥是异步通知页⾯url,提交到项⽬的Payment控制器的notifyurl⽅法;
'notify_url'=> NEW_PORTAL_DOMAIN.'portal.php/AliMobilePay/notify_url.php',
//这⾥是页⾯跳转通知url,提交到项⽬的Payment控制器的returnurl⽅法;
'return_url'=> NEW_PORTAL_DOMAIN.'portal.php/AliMobilePay/return_url.php',
//⽀付成功跳转到的页⾯
'successpage'=>NEW_PORTAL_DOMAIN.'portal.php/Success/index',
//⽀付失败跳转到的页⾯
'errorpage'=>NEW_PORTAL_DOMAIN.'portal.php/Error/index',
//商品展⽰地址
'product_url'=>NEW_PORTAL_DOMAIN.'portal.php/Product/index',)
);
(4)⽀付宝帮助中⼼
4.调⽤⽀付宝接⼝
(1)新建⼀个AliMobilePay控制器
_order_model= new OrderModel();
$this->_order_service= new GuozhanOrderService();
$this->_log_pay_callbacks = new LogPaycallbacksService();
$this->_service = new UserService();
$this->_token_service = new TokenService();
$this->_RadcheckModel = new RadcheckModel();
$this->_Set_MotoRadius_service = new SetMotoRadiusService();
}
/**
* 执⾏新增订单
*/
protected function _post(){
if(isset($this->params['name']) && ($this->params['name']=="notify_url")){
$this->notify_url('notify_url');
die;
}
$this->insert_order();
}
protected function _get(){
/*
三厢车和两厢车的区别*根据配置⽂件⾥的路由规则:
*':'.$var_controller.'/[:name]/[:action]'=>':1/_index?',//匹配控制器后紧跟字符串,表⽰name
* $notify_url会返回Return
*/
$notify_url = isset($this->params['name']) ? FilterComponent::getString($this->params['name']) : 'Unknown'; switch($notify_url){
case 'return_url':
$this->return_url($notify_url);
break;
default:
$this->_log_pay_callbacks->update(array('request_from'=>'Unknown'), false);
exit('Wrong request url');
}
}
//服务器异步通知页⾯⽅法
private function notify_url($notify_url){
$alipay_config = C('ALIMOBILEPAY_CONFIG');
//计算得出通知验证结果
$alipayNotify = new \AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyNotify();
if($verify_result) {//验证成功
//商户订单号
$order_sn = $this->params['out_trade_no'];
//⽀付宝交易号
//$trade_no = $this->params['trade_no'];
//交易状态
$trade_status = $this->params['trade_status'];
$this->_log_pay_callbacks->update(array('request_from'=>$notify_url, 'order_sn'=>$order_sn,
'response_status'=>$trade_status), false);
if (in_array($trade_status,array('TRADE_SUCCESS','TRADE_FINISHED'))) {农合医疗2023交费
//判断该笔订单是否在商户⽹站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户⽹站的订单系统中查到该笔订单的详细,并执⾏商户的业务程序//如果有做过处理,不执⾏商户的业务程序
if(!$this->checkorderstatus($order_sn)){
$result=$this->orderhandle($order_sn);
if($result==true){
echo "success";
}else{
echo "fail";
}
}
}else{

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。