可能比较少的项目用会用到云支付,我之前有个项目就用这个支付,相对于微信支付和支付宝支付他名气太小了,但是很多支付宝或者微信审核不下来就回选择这种支付方式,总体开发比较简单。云支付官网是这么说的“云支付是国内最大的第三方支付接口整合平台,它集成了支付宝,微信,银联支付接口,网银支付等国内著名第三方支付平台,只需几行代码就接入所有支付接口,让用户支付一步到位。通过使用云支付提供的产品服务,让网上收款更方便。”,下面开始运用到项目中:
1、话不多说第一步先看看官方的支付核心包,还是比较简单,总感觉这东西不太安全,这个核心包放置在"Core\Library\Vendor\Yunpay"下:

<?php
// +----------------------------------------------------------------------
// | 云支付核心包
// +----------------------------------------------------------------------
// | Copyright (c) 2013-2016 http://www.bieanju.com/ All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: bieanju <bieanju@163.com>
// | CreateTime : 2016
// +----------------------------------------------------------------------
namespace Vendor\Yunpay;
class YunPay{ public $key;
public $pid; public function __construct(){
$this->key = trim(C("yunpay_config.key"));
$this->pid = trim(C("yunpay_config.partner"));
}
/* 云支付核心处理函数 */
public function md5Verify($i1, $i2,$i3) {
$prestr = $i1 . $i2.$this->pid.$this->key;
$mysgin = md5($prestr); if($mysgin == $i3) {
return true;
}
else {
return false;
}
} public function i2e($parameter,$subm){
foreach ($parameter as $pars) {
$myparameter.=$pars;
}
$sign=md5($myparameter.'i2eapi'.$this->key);
$mycodess="<form name='yunsubmit' action='http://pay.yunpay.net.cn/i2eorder/yunpay/' accept-charset='utf-8' method='get'><input type='hidden' name='body' value='".$parameter['body']."'/><input type='hidden' name='out_trade_no' value='".$parameter['out_trade_no']."'/><input type='hidden' name='partner' value='".$parameter['partner']."'/><input type='hidden' name='seller_email' value='".$parameter['seller_email']."'/><input type='hidden' name='subject' value='".$parameter['subject']."'/><input type='hidden' name='total_fee' value='".$parameter['total_fee']."'/><input type='hidden' name='nourl' value='".$parameter['nourl']."'/><input type='hidden' name='reurl' value='".$parameter['reurl']."'/><input type='hidden' name='orurl' value='".$parameter['orurl']."'/><input type='hidden' name='orimg' value='".$parameter['orimg']."'/><input type='hidden' name='sign' value='".$sign."'/></form><script>document.forms['yunsubmit'].submit();</script>";
return $mycodess;
} public function hifun($string,$operation){
$key=md5('hifun2013');
$key_length=strlen($this->key);
$string=$operation=='D'?base64_decode($string):substr(md5($string.$this->key),0,8).$string;
$string_length=strlen($string);
$rndkey=$box=array();
$result='';
for($i=0;$i<=255;$i++)
{
$rndkey[$i]=ord($this->key[$i%$key_length]);
$box[$i]=$i;
}
for($j=$i=0;$i<256;$i++)
{
$j=($j+$box[$i]+$rndkey[$i])%256;
$tmp=$box[$i];
$box[$i]=$box[$j];
$box[$j]=$tmp;
}
for($a=$j=$i=0;$i<$string_length;$i++)
{
$a=($a+1)%256;
$j=($j+$box[$a])%256;
$tmp=$box[$a];
$box[$a]=$box[$j];
$box[$j]=$tmp;
$result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256]));
}
if($operation=='D')
{
if(substr($result,0,8)==substr(md5(substr($result,8).$this->key),0,8))
return substr($result,8);
else
return'';
}else{
return str_replace('=','',base64_encode($result));
}
}
} ?>

2、第二步来看看实际的应用中的业务逻辑处理:

  2.1、配置参数:

/* yunpay config */
'yunpay_config' => array(
'partner' => '960xxxx',
'key' => 'xxxxxxxx' ,
'seller_email'=>'xx@xx.com'
),
'yunpay' => array(
'notify' => pay_url."index.php/User/YunPay/notifyUrl",
'return' => pay_url."index.php/User/YunPay/returnUrl"
)

  2.2、同步,异步通知业务逻辑处理(此处需要注意的是异步通知方法处理,开发中由于类继承了基础父类结果导致异步通知不到,因为做了是否登录的验证异步就通知不到,所以需要注意这个支付类不用任何的其他验证。):

<?php
// +----------------------------------------------------------------------
// | 云支付[订单处理]
// +----------------------------------------------------------------------
// | Copyright (c) 2013-2016 http://www.bieanju.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: bieanju <bieanju@163.com>
// | CreateTime : 2016
// +----------------------------------------------------------------------
namespace User\Controller;
use Vendor\Yunpay\YunPay;
class YunPayController extends Controller{
/**
* 支付成员变量
* @Author Bieanju
**/
public $orderId,$out_trade_no,$trade_no,$yunprice; public function _initialize() {
parent::_initialize();
header("Content-Type:text/html; charset=utf-8");
} /**
* 云支付
* @Author Bieanju
**/
public function yunpay(){
$model = D("Order");
$where['id'] = $this->orderId ;
$order = $model->where($where)->field('number,buy_sn,pay_amount,buy_status')->find();
$out_trade_no = $order['buy_sn'];//商户网站订单系统中唯一订单号,必填
$subject = "支付[订单编号:".$out_trade_no."]支付测试--别安驹";//必填
$total_fee = $order['pay_amount'];//必填 需为整数
$body = $subject;
$parameter = array(
"partner" => trim(C("yunpay_config.partner")),
"seller_email" => C("yunpay_config.seller_email"),
"out_trade_no" => $out_trade_no,
"subject" => $subject,
"total_fee" => $total_fee,
"body" => $body,
"nourl" => C("yunpay.notify"),
"reurl" => C("yunpay.return"),
"orurl" => "",
"orimg" => ""
);
$YunPayObj = new YunPay();
$html_text = $YunPayObj->i2e($parameter, "支付进行中...");
echo $html_text;
} /**
* 同步通知
* @Author Bieanju
**/
public function returnUrl(){
//计算得出通知验证结果
$YunPayObj = new YunPay();
$yunNotify = $YunPayObj->md5Verify($_REQUEST['i1'],$_REQUEST['i2'],$_REQUEST['i3']);
if($yunNotify) {
$this->out_trade_no = $_REQUEST['i2'];
$this->trade_no = $_REQUEST['i4'];
$this->yunprice=$_REQUEST['i1'];
self::afterPayLogic() && self::payLog();
}
else {
echo "验证失败";
}
} /**
* 异步通知
* @Author Bieanju
**/
public function notifyUrl(){
$YunPayObj = new YunPay();
//计算得出通知验证结果
$yunNotify = $YunPayObj->md5Verify($_REQUEST['i1'],$_REQUEST['i2'],$_REQUEST['i3']);
if($yunNotify) {
echo "success";
}else {
echo "fail";
}
} /**
* 支付完成更新数据
* @Author Bieanju
**/
private function afterPayLogic(){
$model = D("Order");$where['buy_sn'] = $this->out_trade_no;
$orderInfo = $model->where($where)->getField('sale_sn'); $result = $model->where(array("sale_sn"=>$orderInfo))->setField('status',2);
     return $result !== false ? true : false;
} /**
* 日志记录
* @Author Bieanju
**/
private function payLog(){
$model = D("MemberPayLog");
/* data post */
$data['uid'] = $this->userid;
$data['pay_no'] = $this->out_trade_no;
$data['type'] = 0;
$data['create_time'] = time();
$data['amount'] = $this->yunprice;
$data['trade_no'] = $this->trade_no;
/* end */
return $model->add($data) ? true : false;
} } ?>

Ok,云支付成功,如果返回“错误代码:00002993”表示当前的域名未授权,请去云支付官方授权当前域名后即可,是不是很简单呢!

云支付整合Tp3.2.3代码整理的更多相关文章

  1. 阿里大鱼短信接口整合Tp3.2.3开发整理

    阿里大鱼 http://www.alidayu.com/ 的短信接口总体是不错的,别安驹个人认为不管是从性价比还是稳定性上都是跟同类的短信接口好些,毕竟是大公司的东西不会差到哪去.下面把之前开发的短信 ...

  2. Smtp邮件发送系统公用代码整理—总结

    1.前言 a.在软件开发中,我们经常能够遇到给用户或者客户推送邮件,推送邮件也分为很多方式,比如:推送一句话,推送一个网页等等.那么在系统开发中我们一般在什么情况下会使用邮件发送呢?下面我简单总结了一 ...

  3. JAE京东云引擎Git上传管理代码教程和京东云数据库导入导出管理

    文章目录 Git管理准备工作 Git工具上传代码 发布代码装程序 mywebsql管理 京东云引擎小结   JAE京东云引擎是京东推出的支持Java.Ruby.Python.PHP.Node.js多语 ...

  4. Chrome应用技巧之代码整理。

    我们有时候在看别人站点代码时往往是经过压缩的,代码都在一行上了,调试非常是困难,今天给大家介绍一种基本Chrome浏览器的代码整理方法.请看图:

  5. NSIS常用代码整理

    原文 NSIS常用代码整理 这是一些常用的NSIS代码,少轻狂特意整理出来,方便大家随时查看使用.不定期更新哦~~~ 1 ;获取操作系统盘符 2 ReadEnvStr $R0 SYSTEMDRIVE ...

  6. material design 的android开源代码整理

    material design 的android开源代码整理 1 android (material design 效果的代码库) 地址请点击:MaterialDesignLibrary 效果: 2 ...

  7. HTTP请求代码整理

    HTTP请求代码整理 类别 代码 注释 1xx – 信息提示 100 继续 101 切换协议 2xx - 成功 200 确定.客户端请求已成功 201 已创建 202 已接受 203 非权威性信息 2 ...

  8. SQL代码整理

    --SQL代码整理: create database mingzi--创建数据库go--连接符(可省略)create table biao--创建表( lieming1 int not null,-- ...

  9. IOS常用代码整理

    常用代码整理: 12.判断邮箱格式是否正确的代码: //利用正则表达式验证 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRege ...

随机推荐

  1. java学习——abstract 和 final

    当多个类中出现相同功能,但是功能主题不同,这时可以进行向上抽取.这时只抽取功能定义,而不抽取功能主体. 抽象:看不懂.1, 抽象方法一定定义在抽象类中.2, 抽象方法和抽象类都必须被abstract关 ...

  2. C语言获取键盘按键

    在写控制台游戏的时候,发现不管用cin,scanf还是getchar,都不能实时的输入按键,必须要按回车才能读进去,而按回车的话会导致输入异常,所以要使用获取键盘按键的函数. 加入头文件#includ ...

  3. (原)Opencv中直方图均衡和图像动态范围拉伸的代码

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5102032.html 参考网址: http://blog.csdn.net/abcjennifer/a ...

  4. activiti笔记三 Activiti问题重现

    测试的时候出现一个异常: ContextLoader.initWebApplicationContext(308) | Context initialization failed org.spring ...

  5. Orchard开源ASP.NET MVC CMS简介

    项目简介: Orchard CMS 是一个免费的开放源代码内容管理系统,让用户可在 Microsoft ASP.NET MVC 平台上快速创建网站.它基于灵活的扩展性框架构建,使开发人员和定制人员可通 ...

  6. AngularJs directive 'transclude' option 详解

    transclude好像不是一个英语单词,有道词典里没有,百度翻译的意思是嵌入. transclude在angularjs的自定义的derective中是比较常见的一个东西,所有有必要要了解它. 我们 ...

  7. 8051、ARM和DSP指令周期的测试与分析

    在实时嵌入式控制系统中,指令周期对系统的性能有至关重要的影响.介绍几种最常用的微控制器的工作机制,采用一段循环语句对这几种微控制器的指令周期进行测试,并进行分析比较.分析结论对系统控制器的选择有一定的 ...

  8. Fedora安装qt总结四种方法

    在fedora上安装qt有四种方法,本人由于初次接触fedora,所以还是耐心的把三个方法都测试了一遍. 1.  下载源码,手动编译,选择路径安装,请参考<fedora15下搭建QT开发环境及编 ...

  9. Qt中事件分发源代码剖析(一共8个步骤,顺序非常清楚:全局的事件过滤器,再传递给目标对象的事件过滤器,最终传递给目标对象)

    Qt中事件分发源代码剖析 Qt中事件传递顺序: 在一个应该程序中,会进入一个事件循环,接受系统产生的事件,并且进行分发,这些都是在exec中进行的.下面举例说明: 1)首先看看下面一段示例代码: in ...

  10. 基于引擎的matlab+vc混合编程的配置

    前段时间在项目中做了一些关于基于引擎的vc+matlab混合编程的工作. 如果你是混合编程新手,我相信使用引擎的方式编程是比较简单快捷的一种方式. 当然这种方法也有其缺点,就是不能脱离matlab运行 ...