php支付宝支付代码(php支付源码)

  • 1、PHP程序怎么使用支付宝支付 求大神给详细思路 最好简单易懂 是新手
  • 2、php开发中app怎么接入支付宝
  • 3、PHP 支付宝网页支付怎么写
  • 4、php中支付宝接口怎么做?
  • 5、thinkPHP框架的项目怎么做支付宝支付功能

1)打开上面的网页,从页面下方的7中支付方式中选择你需要的方式并点击进去,

2)点击demo下载选择对应你需求的demo

3)把demo代码引入到你的php项目中,lib里的内容不需要你做任何更改,阅读readme说明文档,在吧除lib外的php文件都看一遍,里面每个参数的作用都说明的很清楚,文件里的index.php就是你要用curl去模拟支付请求的路径,当然你配置完成后也可以打开index.php去完成一次支付

准备工作

APP支付接口:alipay.trade.app.pay

服务器端使用框架:TP5

登录蚂蚁金服开放平台 — 创建应用 — 添加App支付功能。具体查看官方文档

下载官方 SDK (PHP版本资源)——当前SDK版本:106 生成时间:2017-07-25 11:46:10

将SDK原码放置在TP5的vendor目录下的alipay文件夹(可根据实际使用框架技术进行实际调整)。

支付接口调用原理

1、APP支付系统架构

APP支付系统架构图

2、数据校验原理

数据校验原理

应用公钥(商户自身的RSA公钥):支付宝使用该公钥验证该交易是商户发起。

支付宝公钥(支付宝的RSA公钥):商户使用该公钥验证该结果是支付宝返回的。

3、系统交互流程

系统交互流程图

4、支付场景具体实现流程(最详细图解)

在集成App支付能力时,建议实现如下支付流程,创建订单并支付,根据返回的结果确定支付状态,并进行相应的异常处理,其过程如下图所示.

支付场景具体实现流程

商家APP在创建订单并且唤起支付宝APP支付,流程如上图所示,根据第2.2,3步返回的支付结果,确定支付状态,并且做相应的异常处理(必要时关闭订单)

代码实现

步骤1:商户APP端请求商户服务器接口,提交订单数据。

步骤2:商户服务器端接收数据,然后对数据进行签名,返回请求参数到商户APP端。

官方接口文档:

——代码如下:

//vendor();为TP5框架的方法,作用:导入第三方框架类库

vendor(‘alipay.aop.AopClient’);

vendor(‘alipay.aop.request.AlipayTradeAppPayRequest’);

//实例化支付接口

$aop = new \AopClient();

$aop-gatewayUrl = “”; //支付宝网关

$aop-appId = “应用ID,填写你的APPID”;

$aop-rsaPrivateKey = “商户私钥,您的原始格式RSA私钥()”;

$aop-alipayrsaPublicKey = “支付宝公钥”;

$aop-apiVersion = ‘1.0’;

$aop-signType = “签名方式,如 RSA2 “;

$aop-postCharset = ‘UTF-8’;

$aop-format = “json”;

//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay

$appRequest = new \AlipayTradeAppPayRequest();

//SDK已经封装掉了公共参数,这里只需要传入业务参数

$bizcontent = json_encode([

‘body’ = ‘余额充值’, //订单描述

‘subject’ = ‘充值’, //订单标题

‘timeout_express’ = ’30m’,

‘out_trade_no’ = ‘20170125test01’, //商户网站唯一订单号

‘total_amount’ = ‘0.01’, //订单总金额

‘product_code’ = ‘QUICK_MSECURITY_PAY’, //固定值

]);

$appRequest-setNotifyUrl($url); //设置异步通知地址

$appRequest-setBizContent($bizcontent);

//这里和普通的接口调用不同,使用的是sdkExecute

$response = $aop-sdkExecute($appRequest);

//htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题

echo htmlspecialchars($response);//就是orderString 可以直接给客户端请求,无需再做处理。

// 如果最后有问题可以尝试把htmlspecialchars方法去掉,直接返回$response

说明:sdkExecute()方法,作用生成签名,详细步骤如下:

将请求参数组装分下列3步,以最后第三步获取到的请求为准。

1)将请求参数的键按字典排序,然后按照key=valuekey=value方式拼接,得到未签名原始字符串如下:

app_id=2015052600090779biz_content={“timeout_express”:”30m”,”product_code”:”QUICK_MSECURITY_PAY”,”total_amount”:”0.01″,”subject”:”1″,”body”:”我是测试数据”,”out_trade_no”:”IQJZSRC1YMQB5HU”}charset=utf-8format=jsonmethod=alipay.trade.app.pay¬ify_url=;sign_type=RSA2×tamp=2016-08-25 20:26:31version=1.0

2)再对原始字符串进行签名

app_id=2015052600090779biz_content={“timeout_express”:”30m”,”product_code”:”QUICK_MSECURITY_PAY”,”total_amount”:”0.01″,”subject”:”1″,”body”:”我是测试数据”,”out_trade_no”:”IQJZSRC1YMQB5HU”}charset=utf-8format=jsonmethod=alipay.trade.app.pay¬ify_url=;sign_type=RSA2×tamp=2016-08-25 20:26:31version=1.0sign=cYmuUnKi5QdBsoZEAbMXVMmRWjsuUj+y48A2DvWAVVBuYkiBj13CFDHu2vZQvmOfkjE0YqCUQE04kqm9Xg3tIX8tPeIGIFtsIyp/M45w1ZsDOiduBbduGfRo1XRsvAyVAv2hCrBLLrDI5Vi7uZZ77Lo5J0PpUUWwyQGt0M4cj8g=

3)最后对请求字符串的所有一级value(biz_content作为一个value)进行encode,编码格式按请求串中的charset为准,没传charset按UTF-8处理,获得最终的请求字符串:

app_id=2015052600090779biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.01%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%22IQJZSRC1YMQB5HU%22%7Dcharset=utf-8format=jsonmethod=alipay.trade.app.pay¬ify_url=http%3A%2F%2Fdomain.merchant.com%2Fpayment_notifysign_type=RSA2×tamp=2016-08-25%2020%3A26%3A31version=1.0sign=cYmuUnKi5QdBsoZEAbMXVMmRWjsuUj%2By48A2DvWAVVBuYkiBj13CFDHu2vZQvmOfkjE0YqCUQE04kqm9Xg3tIX8tPeIGIFtsIyp%2FM45w1ZsDOiduBbduGfRo1XRsvAyVAv2hCrBLLrDI5Vi7uZZ77Lo5J0PpUUWwyQGt0M4cj8g%3D

步骤3:商户APP接收从商户服务器端返回的请求参数,然后调起支付宝支付面板。

若用户支付成功,支付宝会同步给商户APP端返回一个支付结果。相应地,支付宝也会通过异步通知给商户服务器端返回一个支付结果。

注意:由于同步通知和异步通知都可以作为支付完成的凭证,且异步通知支付宝一定会确保发送给商户服务端。为了简化集成流程,商户可以将同步结果仅仅作为一个支付结束的通知(忽略执行校验),实际支付是否成功,完全依赖服务端异步通知。

步骤4:服务端异步通知处理机制(支付宝主动发起通知,该方式才会被启用)

官方接口文档:

注意点:

1)必须保证服务器异步通知页面(notify_url)上无任何字符,如空格、HTML标签、开发系统自带抛出的异常提示信息等;

2)支付宝是用POST方式发送通知信息,因此该页面中获取参数的方式,如:$_POST[‘out_trade_no’];

3)程序执行完后必须打印输出“success”(不包含引号)。如果商户反馈给支付宝的字符不是success这7个字符,支付宝服务器会不断重发通知,直到超过24小时22分钟。一般情况下,25小时以内完成8次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h);

4)当商户收到服务器异步通知并打印出success时,服务器异步通知参数notify_id才会失效。

——代码如下:

$aop = new AopClient;

$aop-alipayrsaPublicKey = ‘请填写支付宝公钥,一行字符串’;

$flag = $aop-rsaCheckV1($_POST, NULL, “RSA2”); //验证签名

if($flag){

//校验通知数据的正确性

$out_trade_no = $_POST[‘out_trade_no’]; //商户订单号

$trade_no = $_POST[‘trade_no’]; //支付宝交易号

$trade_status = $_POST[‘trade_status’]; //交易状态trade_status

$total_amount = $_POST[‘’total_amount’]; //订单的实际金额

$app_id = $_POST[‘app_id’];

if($app_id!=$this-config[‘app_id’]) exit(‘fail’); //验证app_id是否为该商户本身

//只有交易通知状态为TRADE_SUCCESS或TRADE_FINISHED时,支付宝才会认定为买家付款成功。

if($trade_status != ‘TRADE_FINISHED’ $trade_status != ‘TRADE_SUCCESS’)

exit(‘fail’);

//校验订单的正确性

if(!empty($out_trade_no)){

//1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号;

//2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额);

//3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)。

//上述1、2、3有任何一个验证不通过,则表明本次通知是异常通知,务必忽略。在上述验证通过后商户必须根据支付宝不同类型的业务通知,正确的进行不同的业务处理,并且过滤重复的通知结果数据。

//校验成功后在response中返回success,校验失败返回failure

}

exit(‘fail’);

}

echo”fail”; //验证签名失败

步骤5:当商户APP端接收到支付宝的同步返回结果为成功时,商户APP端再请求商户服务器端API,判断订单最终支付结果,并做出最终响应。

1)打开上面的网页,从页面下方的7中支付方式中选择你需要的方式并点击进去,

2)点击demo下载选择对应你需求的demo

3)把demo代码引入到你的php项目中,lib里的内容不需要你做任何更改,阅读readme说明文档,在吧除lib外的php文件都看一遍,里面每个参数的作用都说明的很清楚,文件里的index.php就是你要用curl去模拟支付请求的路径,当然你配置完成后也可以打开index.php去完成一次支付

alipay_config.php配置程序如下:

复制代码 代码如下:

?php

*/

//alipay_config.php 配置程序

$interfaceurl = “:”;

$sitename = “网站名称”;

$weburl = “http://网站网址”;

$o_fee = “0.00”; //平邮费

$e_fee = “0.00”; //快递费

$selleremail = “”;//支付宝账号

$payalikey = “”;//安全校验码

$imgurl = “pay.gif”; //按钮图片源

$imgtitle = “使用支付宝购买”; //按钮图片说明

?

alipay.php代码如下:

复制代码 代码如下:

?php

/*********************************************************************

filename: alipay.php

author: dboyzhang

version: ver 2.0.0 beta1

contact_me: wangwang:dboyzhang

*********************************************************************/

//alipay.php代码

require_once(“alipay_config.php”);

class alipay

{

function geturl($s1,$s2,$s3,$s4,$s5,$s6,$s7,$s8,$s9,$s10,$s11,$s12,$s13,$s14,$s15,$s16,$s17,$s18,$s19,$s20,$s21,$s22,$s23)

{

$parameter = array(

‘cmd’ = $s1,

‘subject’ = $s2,

‘body’ = $s3,

‘order_no’ = $s4,

‘price’ = $s5,

‘url’ = $s6,

‘type’ = $s7,

‘number’ = $s8,

‘transport’ = $s9,

‘ordinary_fee’ = $s10,

‘express_fee’ = $s11,

‘readonly’ = $s12,

‘buyer_msg’ = $s13,

‘seller’ = $s14,

‘buyer’ = $s15,

‘buyer_name’ = $s16,

‘buyer_address’ = $s17,

‘buyer_zipcode’ = $s18,

‘buyer_tel’ = $s19,

‘buyer_mobile’ = $s20,

‘partner’ = $s21,

);

$url = $s22.$s14.”?”;

foreach($parameter as $key = $value){

if($value){

$url .= $key.”=”.urlencode($value).””;

$acsouce .=$key.$value;

}

}

$url .= ‘ac=’.md5($acsouce.$s23);

return $url;

}

}

?

pay.php页面如下:

复制代码 代码如下:

?php

error_reporting(0);

$aliname=$_POST[“aliname”];

$alizipcode=$_POST[“alizipcode”];

$aliphone=$_POST[“aliphone”];

$aliaddress=$_POST[“aliaddress”];

$aliorder=$_POST[“aliorder”];

$alimailtype=$_POST[“alimailtype”];

$alimoney=$_POST[“alimoney”];

$alimob=$_POST[“alimob”];

$alibody=$_POST[“alibody”];

require_once(“alipay_config.php”);

require_once(“alipay.php”);

$cmd = ‘0001’;

$subject = “订单号:”.$aliorder;

$body = ‘商品介绍’;

$order_no = $aliorder;

$price = $alimoney;

$url = ”;//你的网址

$type = ‘1’;

$number = ‘1’;

$transport = $alimailtype;

$ordinary_fee = ‘0.00’;

$express_fee = ‘0.00’;

$readonly = ‘true’;

$buyer_msg = $alibody;

$seller = $selleremail;

$buyer = ”;

$buyer_name = $aliname;

$buyer_address = $aliaddress;

$buyer_zipcode = $alizipcode;

$buyer_tel = $aliphone;

$buyer_mobile = $alimob;

$partner = ‘2088002008096997’;

$geturl = new alipay;

$link = $geturl-geturl

(

$cmd,$subject,$body,$order_no,$price,$url,$type,$number,$transport,

$ordinary_fee,$express_fee,$readonly,$buyer_msg,$seller,$buyer,

$buyer_name,$buyer_address,$buyer_zipcode,$buyer_tel,$buyer_mobile,$partner,

$interfaceurl,$payalikey

);

?

html

head

title简易支付宝付款php版/title

link href=”admin_style.css教程” rel=stylesheet

meta http-equiv=content-type content=”text/html; charset=gb2312″

/head

body

table class=border id=table1 style=”font-size: 9pt” height=185 cellspacing=0

cellpadding=0 width=492 align=center border=0

tbody

tr

td class=topbg height=30

div align=centerstrong简易支付宝付款php版/strong/div/td/tr

tr

td style=”border-left: #e4e4e4 1px solid; border-bottom: #e4e4e4 1px solid” colspan=3 height=150

table style=”font-size: 9pt” height=137 width=”100%” align=center bgcolor=#ffffff

tbody

tr class=tdbg

td width=”14%”订单号码:/td

td width=”86%”? echo $aliorder; ?/td/tr

tr class=tdbg

td width=”14%”收 货 人:/td

td width=”86%”? echo $aliname; ?/td/tr

tr class=tdbg

td width=”14%”付款金额:/td

td width=”86%”b? echo $alimoney; ?/b/td/tr

tr class=tdbg

td width=”14%”收货地址:/td

td width=”86%”? echo $aliaddress; ?/td/tr

tr class=tdbg

td物流方式:/td

td? echo $alimailtype; ? (1.平邮 2.快递 3.虚拟物品)/td/tr

tr class=tdbg

td联系电话:/td

td? echo $aliphone; ?/td/tr

tr class=tdbg

td邮政编码:/td

td? echo $alizipcode; ?/td/tr

tr class=tdbg

td手机号码:/td

td? echo $alimob; ?/td/tr

tr class=tdbg

td客户留言:/td

td? echo $alibody; ?/td/tr

tr class=tdbg

td/td

tdinput type=”button” name=”submit21″ onclick=”网页特效:history.go(-1)” value=”返回修改订单” a href=”?php echo $link?” target=”_blank”img src=”?php echo $imgurl?” alt=”?php echo $imgtitle?” border=”0″ align=’absmiddle’ border=’0’//a /td/tr/tbody/table/td/tr/tbody/table

/body/html

1、在配置文件中Conf/Config.php文件中对支付宝相关参数进行配置:

//支付宝配置参数

‘alipay_config’=array(

‘partner’ =’20********50′, //这里是你在成功申请支付宝接口后获取到的PID;

‘key’=’9t***********ie’,//这里是你在成功申请支付宝接口后获取到的Key

‘sign_type’=strtoupper(‘MD5’),

‘input_charset’= strtolower(‘utf-8’),

‘cacert’= getcwd().’\\cacert.pem’,

‘transport’= ‘http’,

),

//以上配置项,是从接口包中alipay.config.php 文件中复制过来,进行配置;

‘alipay’ =array(

//这里是卖家的支付宝账号,也就是你申请接口时注册的支付宝账号

‘seller_email’=’pay@xxx.com’,

//这里是异步通知页面url,提交到项目的Pay控制器的notifyurl方法;

‘notify_url’=”,

//这里是页面跳转通知url,提交到项目的Pay控制器的returnurl方法;

‘return_url’=”,

//支付成功跳转到的页面,我这里跳转到项目的User控制器,myorder方法,并传参payed(已支付列表)

‘successpage’=’User/myorder?ordtype=payed’,

//支付失败跳转到的页面,我这里跳转到项目的User控制器,myorder方法,并传参unpay(未支付列表)

‘errorpage’=’User/myorder?ordtype=unpay’,

),

复制代码

2、新建一个PayAction控制器代码如下:

?php

class PayAction extends Action{

//在类初始化方法中,引入相关类库

public function _initialize() {

vendor(‘Alipay.Corefunction’);

vendor(‘Alipay.Md5function’);

vendor(‘Alipay.Notify’);

vendor(‘Alipay.Submit’);

}

//doalipay方法

/*该方法其实就是将接口文件包下alipayapi.php的内容复制过来

然后进行相关处理

*/

public function doalipay(){

/*********************************************************

把alipayapi.php中复制过来的如下两段代码去掉,

第一段是引入配置项,

第二段是引入submit.class.php这个类。

为什么要去掉??

第一,配置项的内容已经在项目的Config.php文件中进行了配置,我们只需用C函数进行调用即可;

第二,这里调用的submit.class.php类库我们已经在PayAction的_initialize()中已经引入;所以这里不再需要;

*****************************************************/

// require_once(“alipay.config.php”);

// require_once(“lib/alipay_submit.class.php”);

//这里我们通过TP的C函数把配置项参数读出,赋给$alipay_config;

$alipay_config=C(‘alipay_config’);

/**************************请求参数**************************/

$payment_type = “1”; //支付类型 //必填,不能修改

$notify_url = C(‘alipay.notify_url’); //服务器异步通知页面路径

$return_url = C(‘alipay.return_url’); //页面跳转同步通知页面路径

$seller_email = C(‘alipay.seller_email’);//卖家支付宝帐户必填

$out_trade_no = $_POST[‘trade_no’];//商户订单号 通过支付页面的表单进行传递,注意要唯一!

$subject = $_POST[‘ordsubject’]; //订单名称 //必填 通过支付页面的表单进行传递

$total_fee = $_POST[‘ordtotal_fee’]; //付款金额 //必填 通过支付页面的表单进行传递

$body = $_POST[‘ordbody’]; //订单描述 通过支付页面的表单进行传递

$show_url = $_POST[‘ordshow_url’]; //商品展示地址 通过支付页面的表单进行传递

$anti_phishing_key = “”;//防钓鱼时间戳 //若要使用请调用类文件submit中的query_timestamp函数

$exter_invoke_ip = get_client_ip(); //客户端的IP地址

/************************************************************/

//构造要请求的参数数组,无需改动

$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” = $total_fee,

“body” = $body,

“show_url” = $show_url,

“anti_phishing_key” = $anti_phishing_key,

“exter_invoke_ip” = $exter_invoke_ip,

“_input_charset” = trim(strtolower($alipay_config[‘input_charset’]))

);

//建立请求

$alipaySubmit = new AlipaySubmit($alipay_config);

$html_text = $alipaySubmit-buildRequestForm($parameter,”post”, “确认”);

echo $html_text;

}

/******************************

服务器异步通知页面方法

其实这里就是将notify_url.php文件中的代码复制过来进行处理

*******************************/

function notifyurl(){

/*

同理去掉以下两句代码;

*/

//require_once(“alipay.config.php”);

//require_once(“lib/alipay_notify.class.php”);

//这里还是通过C函数来读取配置项,赋值给$alipay_config

$alipay_config=C(‘alipay_config’);

//计算得出通知验证结果

$alipayNotify = new AlipayNotify($alipay_config);

$verify_result = $alipayNotify-verifyNotify();

if($verify_result) {

//验证成功

//获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表

$out_trade_no = $_POST[‘out_trade_no’]; //商户订单号

$trade_no = $_POST[‘trade_no’]; //支付宝交易号

$trade_status = $_POST[‘trade_status’]; //交易状态

$total_fee = $_POST[‘total_fee’]; //交易金额

$notify_id = $_POST[‘notify_id’]; //通知校验ID。

$notify_time = $_POST[‘notify_time’]; //通知的发送时间。格式为yyyy-MM-dd HH:mm:ss。

$buyer_email = $_POST[‘buyer_email’]; //买家支付宝帐号;

$parameter = array(

“out_trade_no” = $out_trade_no, //商户订单编号;

“trade_no” = $trade_no, //支付宝交易号;

“total_fee” = $total_fee, //交易金额;

“trade_status” = $trade_status, //交易状态

“notify_id” = $notify_id, //通知校验ID。

“notify_time” = $notify_time, //通知的发送时间。

“buyer_email” = $buyer_email, //买家支付宝帐号;

);

if($_POST[‘trade_status’] == ‘TRADE_FINISHED’) {

//

}else if ($_POST[‘trade_status’] == ‘TRADE_SUCCESS’) { if(!checkorderstatus($out_trade_no)){

orderhandle($parameter);

//进行订单处理,并传送从支付宝返回的参数;

}

}

echo “success”; //请不要修改或删除

}else {

//验证失败

echo “fail”;

}

}

/*

页面跳转处理方法;

这里其实就是将return_url.php这个文件中的代码复制过来,进行处理;

*/

function returnurl(){

//头部的处理跟上面两个方法一样,这里不罗嗦了!

$alipay_config=C(‘alipay_config’);

$alipayNotify = new AlipayNotify($alipay_config);//计算得出通知验证结果

$verify_result = $alipayNotify-verifyReturn();

if($verify_result) {

//验证成功

//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表

$out_trade_no = $_GET[‘out_trade_no’]; //商户订单号

$trade_no = $_GET[‘trade_no’]; //支付宝交易号

$trade_status = $_GET[‘trade_status’]; //交易状态

$total_fee = $_GET[‘total_fee’]; //交易金额

$notify_id = $_GET[‘notify_id’]; //通知校验ID。

$notify_time = $_GET[‘notify_time’]; //通知的发送时间。

$buyer_email = $_GET[‘buyer_email’]; //买家支付宝帐号;

$parameter = array(

“out_trade_no” = $out_trade_no, //商户订单编号;

“trade_no” = $trade_no, //支付宝交易号;

“total_fee” = $total_fee, //交易金额;

“trade_status” = $trade_status, //交易状态

“notify_id” = $notify_id, //通知校验ID。

“notify_time” = $notify_time, //通知的发送时间。

“buyer_email” = $buyer_email, //买家支付宝帐号

);

if($_GET[‘trade_status’] == ‘TRADE_FINISHED’ || $_GET[‘trade_status’] == ‘TRADE_SUCCESS’) {

if(!checkorderstatus($out_trade_no)){

orderhandle($parameter); //进行订单处理,并传送从支付宝返回的参数;

}

$this-redirect(C(‘alipay.successpage’));//跳转到配置项中配置的支付成功页面;

}else {

echo “trade_status=”.$_GET[‘trade_status’];

$this-redirect(C(‘alipay.errorpage’));//跳转到配置项中配置的支付失败页面;

}

}else {

//验证失败

//如要调试,请看alipay_notify.php页面的verifyReturn函数

echo “支付失败!”;

}

}

}

?

复制代码

3、这里有几个支付处理过程中需要用到的函数,我把这些函数写到了项目的Common/common.php中,这样不用手动调用,即可直接使用这些函数,代码如下:

//////////////////////////////////////////////////////

//Orderlist数据表,用于保存用户的购买订单记录;

/* Orderlist数据表结构;

CREATE TABLE `tb_orderlist` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`userid` int(11) DEFAULT NULL,购买者userid

`username` varchar(255) DEFAULT NULL,购买者姓名

`ordid` varchar(255) DEFAULT NULL,订单号

`ordtime` int(11) DEFAULT NULL,订单时间

`productid` int(11) DEFAULT NULL,产品ID

`ordtitle` varchar(255) DEFAULT NULL,订单标题

`ordbuynum` int(11) DEFAULT ‘0’,购买数量

`ordprice` float(10,2) DEFAULT ‘0.00’,产品单价

`ordfee` float(10,2) DEFAULT ‘0.00’,订单总金额

`ordstatus` int(11) DEFAULT ‘0’,订单状态

`payment_type` varchar(255) DEFAULT NULL,支付类型

`payment_trade_no` varchar(255) DEFAULT NULL,支付接口交易号

`payment_trade_status` varchar(255) DEFAULT NULL,支付接口返回的交易状态

`payment_notify_id` varchar(255) DEFAULT NULL,

`payment_notify_time` varchar(255) DEFAULT NULL,

`payment_buyer_email` varchar(255) DEFAULT NULL,

`ordcode` varchar(255) DEFAULT NULL, //这个字段不需要的,大家看我西面的修正补充部分的说明!

`isused` int(11) DEFAULT ‘0’,

`usetime` int(11) DEFAULT NULL,

`checkuser` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

*/

//在线交易订单支付处理函数

//函数功能:根据支付接口传回的数据判断该订单是否已经支付成功;

//返回值:如果订单已经成功支付,返回true,否则返回false;

function checkorderstatus($ordid){

$Ord=M(‘Orderlist’);

$ordstatus=$Ord-where(‘ordid=’.$ordid)-getField(‘ordstatus’);

if($ordstatus==1){

return true;

}else{

return false;

}

}

//处理订单函数

//更新订单状态,写入订单支付后返回的数据

function orderhandle($parameter){

$ordid=$parameter[‘out_trade_no’];

$data[‘payment_trade_no’] =$parameter[‘trade_no’];

$data[‘payment_trade_status’] =$parameter[‘trade_status’];

$data[‘payment_notify_id’] =$parameter[‘notify_id’];

$data[‘payment_notify_time’] =$parameter[‘notify_time’];

$data[‘payment_buyer_email’] =$parameter[‘buyer_email’];

$data[‘ordstatus’] =1;

$Ord=M(‘Orderlist’);

$Ord-where(‘ordid=’.$ordid)-save($data);

}

原创文章,作者:C47V5,如若转载,请注明出处:https://www.506064.com/n/127159.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
C47V5的头像C47V5
上一篇 2024-10-03 23:13
下一篇 2024-10-03 23:13

相关推荐

  • 如何在Git中取消修改

    一、如何取消部分修改 在Git中,我们可能会有这样一种情况:我们不想完全撤销对文件的更改,只是希望撤销文件的部分修改。这时候,我们可以使用Git的”git add -p…

    编程 2024-11-20
  • 深入理解非独立同分布

    一、基础概念 非独立同分布,英文简称Non-identically Distributed(NID), 实际上就是指不是独立同分布的概率分布函数。 简单来说,如果一个数据集中的每一…

    编程 2024-10-04
  • 如何在 CSS 中添加 margin?

    CSS 中的 margin 属性可以为元素设置外边距,其可以用于调整元素与周围元素之间的距离,从而改变页面的布局和样式。下面我们将从多个方面进行详细阐述如何在 CSS 中添加 ma…

    编程 2024-10-03
  • 修改本地mysql数据库密码,修改MySQL数据库密码

    本文目录一览: 1、如何改mysql数据库数据库密码 2、mysql数据库密码修改 3、如何修改MySql数据库的用户名和密码? 4、mysql数据库root的密码忘记了怎么办?可…

    编程 2024-10-27
  • 字体大宝库的全新解决方案

    一、字体大宝库是什么 字体大宝库是一种用于在线生成字体的工具。它包含了成千上万种不同类型的字体,用户可以通过简单的操作就可以使用这些字体来美化自己的作品。 字体大宝库的典型用户包括…

    编程 2024-10-04
  • Oracle中decode函数用法详解

    一、Oracle数据库decode函数 Oracle数据库提供了decode函数,该函数可以在条件成立时返回一个表达式,否则返回另一个表达式。其语法如下: decode(expr,…

    编程 2024-12-10
  • MD5Hash详解

    一、MD5Hash基础 MD5,全称为 Message-Digest Algorithm 5,是一种常用的密码散列函数,用于确保数据的完整性和一致性。MD5Hash将任意长度的数据…

    编程 2024-12-09
  • Java实现修改文件名的方法

    一、介绍 在日常开发中,我们经常需要通过代码来操作文件和文件夹。在文件操作过程中,有时我们需重新给文件或文件夹改名,以更好地管理和处理它们。本文将介绍在Java中实现修改文件名的方…

    编程 2024-12-06
  • c语言空格单词,c语言怎么打出空格

    本文目录一览: 1、C语言,输入一行文字,单词间以空格分隔,然后分离其中的单词按每行一个单词输出,程序有了,求解释 2、c语言以键盘输入一串英文字符串,给各个单词之间以空格分开,统…

    编程 2024-11-30
  • JavaByte:掌握Java编程从此不再困难

    Java作为一门强类型语言,被广泛应用于企业级Web应用开发、Android应用开发、游戏开发等领域。相信很多程序员都曾花费很大精力学习Java编程,但由于其内部机制复杂,往往会遇…

    编程 2024-11-14

发表回复

登录后才能评论