TP框架集成支付宝,中转页变成gbk编码

简介:
tp框架中集成支付宝的功能,将支付宝的demo例子存在到下图位置\Extend\Vendor\Alipay
  生成支付订单
/**
*支付订单
*/
publicfunctionpay(){
header("Content-Type:text/html;charset=utf-8");
$id=I('post.oid','','htmlspecialchars');
$DAO=M('order');
$order=$DAO->where("id=".$id)->find();
$error="";
if(!isset($order)){
$error="订单不存在";
}elseif($order['PaymentStatus']==1){
$error="此订单已经完成,无需再次支付!";
}elseif($order['PaymentStatus']==2){
$error="此订单已经取消,无法支付,请重新下单!";
}
if($error!=""){
$this->_FAIL("系统错误",$error,$this->getErrorLinks());
return;
}
$payType=I('post.payType','','htmlspecialchars');
#支付宝
if($payType=='alipay'){
$this->payWithAlipay($order);
}
}
 支付订单提交
/**
*以支付宝形式支付
*@paramunknown_type$order
*/
privatefunctionpayWithAlipay($order){
//引入支付宝相关的文件
require_once(VENDOR_PATH."Alipay/alipay.config.php");
require_once(VENDOR_PATH."Alipay/lib/alipay_submit.class.php");
//支付类型
$payment_type="1";
//必填,不能修改
//服务器异步通知页面路径
$notify_url=C("HOST")."index.php/Alipay/notifyOnAlipay";
//页面跳转同步通知页面路径
$return_url=C("HOST")."index.php/Pay/ok";
//卖家支付宝帐户
$seller_email=$alipay_config['seller_email'];
//必填
//商户订单号,从订单对象中获取
$out_trade_no=$order['OrderNum'];
//商户网站订单系统中唯一订单号,必填
//订单名称
$subject="物流服务";
//必填
//付款金额
#正常金额
$price=$order['Price'];
#测试金额
#$price=0.1;
//必填
$body=$subject;
//商品展示地址
$show_url=C('HOST');
//构造要请求的参数数组,无需改动
$parameter=array(
"service"=>"create_direct_pay_by_user",
"partner"=>trim($alipay_config['partner']),
"payment_type"=>$payment_type,
"notify_url"=>$notify_url,
"return_url"=>$return_url,
"seller_email"=>$seller_email,
"out_trade_no"=>$out_trade_no,
"subject"=>$subject,
"total_fee"=>$price,
"body"=>$body,
"show_url"=>$show_url,
"_input_charset"=>trim(strtolower($alipay_config['input_charset']))
);
Log::write('支付宝订单参数:'.var_export($parameter,true),Log::DEBUG);
//建立请求
$alipaySubmit=newAlipaySubmit($alipay_config);
$html_text=$alipaySubmit->buildRequestForm($parameter,"get","去支付");
echo$html_text;
}
支付宝回调接口
<?php
/**
*支付宝回调接口
*/
classAlipayActionextendsAction{
/**
*支付宝异步通知
*/
publicfunctionnotifyOnAlipay(){
Log::write("notify:".print_r($_REQUEST,true),Log::DEBUG);
require_once(VENDOR_PATH."Alipay/alipay.config.php");
require_once(VENDOR_PATH."Alipay/lib/alipay_notify.class.php");
$orderLogDao=M('orderlog');
//计算得出通知验证结果
$alipayNotify=newAlipayNotify($alipay_config);
$verify_result=$alipayNotify->verifyNotify();
Log::write('verify_result:'.var_export($verify_result,true),Log::DEBUG);
if($verify_result){//验证成功
//商户订单号
$out_trade_no=$_POST['out_trade_no'];
//支付宝交易号
$trade_no=$_POST['trade_no'];
//根据订单号获取订单
$DAO=M('order');
$order=$DAO->where("OrderNum='".$out_trade_no."'")->find();
//如果订单不存在,设置为0
if(!isset($order)){
$orderId=0;
}
else{
$orderId=$order['id'];
}
//交易状态
$trade_status=$_POST['trade_status'];
$log="notifyfromAlipay,trade_status=".$trade_status."alipaysign=".$_POST['sign'].'price='.$_POST['total_fee'];
$orderLog['o_id']=$orderId;
if($_POST['trade_status']=='TRADE_FINISHED'||$_POST['trade_status']=='TRADE_SUCCESS'){
#修改订单状态
if((float)$order['Price']!=(float)$_POST['total_fee']){
$data['PaymentStatus']='2';
}else{
$data['PaymentStatus']='1';
}
$DAO->where('id='.$orderId)->save($data);
}
$orderLog['pay_id']=$trade_no;
$orderLog['pay_log']=$log;
$orderLog['pay_type']='alipay';
$orderLog['pay_result']='success';
$orderLogDao->add($orderLog);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
echo"success";//返回成功标记给支付宝
}
else{
//验证不通过时,也记录下来
$orderLog['pay_log']="notifyfromAlipay,但是验证不通过,sign=".$_POST['sign'];
$orderLog['o_id']=-1;
$orderLog['pay_type']='alipay';
$orderLog['pay_result']='fail';
$orderLogDao->add($orderLog);
//验证失败
echo"fail";
}
}
}
?>
  今天在tp框架中集成支付宝功能,跳转支付宝的时候出现乱码错误。
  需要设定header("Content-Type:text/html;charset=utf-8");
  如果还有乱码查看日志信息是否出现
  NOTIC:[2]Cannotmodifyheaderinformation-headersalreadysentby(outputstartedat
  上面错误,删除错误文件开始的空格
  <emid="__mceDel"></em>

最新内容请见作者的GitHub页:http://qaseven.github.io/
相关文章
|
9月前
|
存储 人工智能 测试技术
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
141593 29
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
|
6月前
|
移动开发 Java 测试技术
HarmonyOS NEXT~鸿蒙系统与mPaaS三方框架集成指南
本文详细介绍了鸿蒙系统(HarmonyOS)与mPaaS框架的集成方法。鸿蒙系统作为华为开发的分布式操作系统,具备分布式架构、微内核设计等特性;mPaaS是蚂蚁金服推出的移动开发平台,提供金融级组件和全生命周期管理能力。文章从环境准备、核心功能集成(如初始化、用户认证、支付功能)、适配问题解决到调试测试及最佳实践,全方位指导开发者高效集成两者。通过遵循指南,可充分利用鸿蒙的特性和mPaaS的金融能力,构建高性能、高安全性的应用,同时避免常见兼容性问题,缩短开发周期。
365 0
|
7月前
|
人工智能 程序员 测试技术
通义灵码与魔搭 Notebook 深度集成:在线编码开箱即用,开发效率倍增
通义灵码 2.0 AI 程序员 2025 年 1 月正式上线,目前已经服务百万开发者,成为国内开发者最受欢迎的智能编码助手。
|
10月前
|
人工智能 达摩院 并行计算
VideoRefer:阿里达摩院开源视频对象感知与推理框架,可集成 VLLM 提升其空间和时间理解能力
VideoRefer 是浙江大学与阿里达摩学院联合推出的视频对象感知与推理技术,支持细粒度视频对象理解、复杂关系分析及多模态交互,适用于视频剪辑、教育、安防等多个领域。
573 17
VideoRefer:阿里达摩院开源视频对象感知与推理框架,可集成 VLLM 提升其空间和时间理解能力
|
9月前
|
人工智能 IDE 测试技术
用户说 | 通义灵码2.0,跨语言编码+自动生成单元测试+集成DeepSeek模型且免费使用
通义灵码, 作为国内首个 AI 程序员,从最开始的内测到公测,再到通义灵码正式发布第一时间使用,再到后来使用企业定制版的通义灵码,再再再到现在通义灵码2.0,我可以说“用着”通义灵码成长的为数不多的程序员之一了吧。咱闲言少叙,直奔主题!今天,我会聊一聊通义灵码的新功能和通义灵码2.0与1.0的体验感。
|
7月前
|
人工智能 IDE 测试技术
通义灵码与魔搭Notebook深度集成:在线编码开箱即用,开发效率倍增
通义灵码2.0 AI程序员于2025年1月上线,目前已支持超过百万开发者。该工具的智能编程能力现已与阿里云AI模型开发平台魔搭ModelScope实现技术集成
318 0
|
9月前
|
人工智能 IDE 测试技术
用户说 | 通义灵码2.0,跨语言编码+自动生成单元测试+集成DeepSeek模型且免费使用
用户说 | 通义灵码2.0,跨语言编码+自动生成单元测试+集成DeepSeek模型且免费使用
|
12月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
301 2
|
算法 API Apache
Flink CDC:新一代实时数据集成框架
本文源自阿里云实时计算团队 Apache Flink Committer 任庆盛在 Apache Asia CommunityOverCode 2024 的分享,涵盖 Flink CDC 的概念、版本历程、内部实现及社区未来规划。Flink CDC 是一种基于数据库日志的 CDC 技术实现的数据集成框架,能高效完成全量和增量数据的实时同步。自 2020 年以来,Flink CDC 经过多次迭代,已成为功能强大的实时数据集成工具,支持多种数据库和数据湖仓系统。未来将进一步扩展生态并提升稳定性。
4146 3
Flink CDC:新一代实时数据集成框架
|
Java 程序员 API
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
640 1