php支付宝插入数据库 怎么用php连接数据库

thinkphp中怎么加入支付宝接口

重新整理接口包文件,这一步应该算是比较关键的(个人认为)

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:申请域名、网页空间、营销软件、网站建设、铁西网站维护、网站推广。

下载下来的接口包文件有很多语言的源码,

我们选择 create_direct_pay_by_user-PHP-UTF-8 这个名称的接口文件。里面包括如下文件:

images文件里是支付宝相关的一些标志的图片,我们暂不管他,lib文件很重要,是整个接口的核心类文件;

alipay.config.php是相关参数的配置文件

alipayapi.php 是支付宝接口入口文件

notify_url.php 是服务器异步通知页面文件;

return_url.php 是页面跳转同步通知文件;

在ThinkPHP的框架文件下,找到Extend 进入,再进入Vendor,在Vendor文件夹下,新建文件夹Alipay,把支付宝作为第三方类库引入。然后,复制支付宝接口文件包中lib文件里的所有文件。一共4个文件,如下:

现在对以上文件进行重命名,

alipay_core.function.php重命名为:Corefunction.php;

alipay_md5.function.php重命名为:Md5function.php;

alipay_notify.class.php重命名为:Notify.php;

alipay_submit.class.php重命名为:Submit.php;

然后,打开Submit.php文件,把以下代码去掉;

require_once("alipay_core.function.php");

require_once("alipay_md5.function.php");

复制代码

同样,打开Notify.php文件,把以下两段代码去掉

require_once("alipay_core.function.php");

require_once("alipay_md5.function.php");

复制代码

为什么要去掉以上两个文件中的这两段代码,因为在项目中调用接口文件的时候,我把所有4个核心文件都通过vendor来进行引入。所以,这不再需要导入。

到此,支付宝接口包相关核心类库的整理基本完成。现在开始在项目中调用;

三、在项目中调用支付宝接口

调用分两步:

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 "支付失败!";

}

}

}

?

支付宝PHP接口问题

$sql="INSERT INTO `buy`.`dingdan` (`id` ,

`dingdanhao`,

`title` ,

`price` ,

`miaoshu` ,

`p_name` ,

`p_add` ,

`tel` ,

`zhuangtai`,

`fahuo`,

`shouhuo`

)

VALUES (

NULL ,'1123', '111', '0.01', '苏杭', '张迪', '山东', '150','2','2','2')";

echo $sql;

输出sql直接拿到sql编辑器执行就知道为什么不行了

PHP支付宝接口,付款成功后,返回成功,然后将消费记录插入到数据库。插入数据库的代码写在哪个文件里?

付款成功的逻辑处理在noticy文件里,这个文件不可见,是支付宝付款成功后台调用通知你的页面

return这个文件是付款成功后用户跳回看到的页面,

官方的文档写的很清楚

php自动抓取淘宝订单号和支付宝交易号存入数据库的代码

你这个想法很好,但是实现起来很麻烦,首先你需要淘宝对你开放API接口才行,然后写代码有事一个难事,不过我知道有一个软件是可以实现的,甩手掌柜,只需要绑定你的淘宝账号就可以,因为他们一个公司,和淘宝合作,淘宝对其开放API,然后一个团队写代码,所以是可以实现的。不光可以自动下载订单,还可以轻松管理商品,打印发货单,进销存管理等等!

php开发中app怎么接入支付宝

准备工作

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,判断订单最终支付结果,并做出最终响应。

php如何实现延时插入值到数据库里。而继续执行程序。(20分+现金奖赏)

你的问题有个难点

跳转到B后 B无法知道A有没有操作成功,当然也不知道刚插入的数据是什么?

那要知道有没有新数据的方法也不是没有

1.在B中使用心跳机制,去检查有没有新数据上来。有的话就显示。

2.用推的方式,也就是serverpush,有新数据通知B

解决了这个问题,其他问题都好解决,延迟插入写个队列就行。

不过你要实现这样的功能,不是PHP就可以办到的,要配合一些服务器技术和Shell才能完成


本文题目:php支付宝插入数据库 怎么用php连接数据库
标题链接:http://scyanting.com/article/doddjoc.html