php接入支付宝的流程写在这里供像我一样的小白参考。
1.首先要有一个创建一个应用(选好自己想要的功能,关于支付的功能,貌似都需要签约)
2.下载SDK&Dome(网址https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.CBtzBF&treeId=203&articleId=105910&docType=1)
我选择的是MD5签名方式,下面红框内就是做好的php Demo
lib文件很重要,是整个接口的核心类文件;
alipay.config.php是相关参数的配置文件
alipayapi.php 是支付宝接口入口文件
notify_url.php 是服务器异步通知页面文件;
return_url.php 是页面跳转同步通知文件;
3.打开alipay.config.php
4.配置完成后这个小例子就能直接访问了
通过这个例子,我们就能灵活运用了
**********************************************
嵌入thinkphp3.2.3
我保留了
重新命名为
分别给这五个文件加上命名空间
这四个文件的命名空间改为
Alipay.class.php 有改动
<?php
namespace Extend\Alipay;
class Alipay {
public function pay(alipayconfig,𝑎𝑙𝑖𝑝𝑎𝑦𝑐𝑜𝑛𝑓𝑖𝑔, args){
/**************************请求参数**************************/
//支付类型
paymenttype="1";//必填,不能修改//服务器异步通知页面路径𝑝𝑎𝑦𝑚𝑒𝑛𝑡𝑡𝑦𝑝𝑒="1";//必填,不能修改//服务器异步通知页面路径 notify_url = args[′notifyurl′];//需http://格式的完整路径,不能加?id=123这类自定义参数//页面跳转同步通知页面路径𝑎𝑟𝑔𝑠[′𝑛𝑜𝑡𝑖𝑓𝑦𝑢𝑟𝑙′];//需ℎ𝑡𝑡𝑝://格式的完整路径,不能加?𝑖𝑑=123这类自定义参数//页面跳转同步通知页面路径 return_url = args[′returnurl′];//需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost///商户订单号𝑎𝑟𝑔𝑠[′𝑟𝑒𝑡𝑢𝑟𝑛𝑢𝑟𝑙′];//需ℎ𝑡𝑡𝑝://格式的完整路径,不能加?𝑖𝑑=123这类自定义参数,不能写成ℎ𝑡𝑡𝑝://𝑙𝑜𝑐𝑎𝑙ℎ𝑜𝑠𝑡///商户订单号 out_trade_no = args[′outtradeno′];//商户网站订单系统中唯一订单号,必填//订单名称𝑎𝑟𝑔𝑠[′𝑜𝑢𝑡𝑡𝑟𝑎𝑑𝑒𝑛𝑜′];//商户网站订单系统中唯一订单号,必填//订单名称 subject = "测试";
//必填
//付款金额
totalfee=𝑡𝑜𝑡𝑎𝑙𝑓𝑒𝑒= args['total'];
//必填
//订单描述
body="test";//需以http://开头的完整路径,例如:http://www.商户网址.com/myorder.html//防钓鱼时间戳𝑏𝑜𝑑𝑦="𝑡𝑒𝑠𝑡";//需以ℎ𝑡𝑡𝑝://开头的完整路径,例如:ℎ𝑡𝑡𝑝://𝑤𝑤𝑤.商户网址.𝑐𝑜𝑚/𝑚𝑦𝑜𝑟𝑑𝑒𝑟.ℎ𝑡𝑚𝑙//防钓鱼时间戳 anti_phishing_key = "";
//若要使用请调用类文件submit中的query_timestamp函数
//客户端的IP地址
exterinvokeip="";//非局域网的外网IP地址,如:221.0.0.1/∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗///构造要请求的参数数组,无需改动𝑒𝑥𝑡𝑒𝑟𝑖𝑛𝑣𝑜𝑘𝑒𝑖𝑝="";//非局域网的外网𝐼𝑃地址,如:221.0.0.1/∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗///构造要请求的参数数组,无需改动 parameter = array(
"service" => "create_direct_pay_by_user",
"partner" => trim(alipayconfig[′partner′]),"sellerid"=>trim(𝑎𝑙𝑖𝑝𝑎𝑦𝑐𝑜𝑛𝑓𝑖𝑔[′𝑝𝑎𝑟𝑡𝑛𝑒𝑟′]),"𝑠𝑒𝑙𝑙𝑒𝑟𝑖𝑑"=>𝑡𝑟𝑖𝑚( alipay_config['seller_id']),
"payment_type" => paymenttype,"notifyurl"=>𝑝𝑎𝑦𝑚𝑒𝑛𝑡𝑡𝑦𝑝𝑒,"𝑛𝑜𝑡𝑖𝑓𝑦𝑢𝑟𝑙"=> notify_url,
"return_url" => returnurl,"outtradeno"=>𝑟𝑒𝑡𝑢𝑟𝑛𝑢𝑟𝑙,"𝑜𝑢𝑡𝑡𝑟𝑎𝑑𝑒𝑛𝑜"=> out_trade_no,
"subject" => subject,"totalfee"=>𝑠𝑢𝑏𝑗𝑒𝑐𝑡,"𝑡𝑜𝑡𝑎𝑙𝑓𝑒𝑒"=> total_fee,
"body" => body,"showurl"=>𝑏𝑜𝑑𝑦,"𝑠ℎ𝑜𝑤𝑢𝑟𝑙"=> show_url,
"anti_phishing_key" => antiphishingkey,"exterinvokeip"=>𝑎𝑛𝑡𝑖𝑝ℎ𝑖𝑠ℎ𝑖𝑛𝑔𝑘𝑒𝑦,"𝑒𝑥𝑡𝑒𝑟𝑖𝑛𝑣𝑜𝑘𝑒𝑖𝑝"=> exter_invoke_ip,
"_input_charset" => trim(strtolower(alipayconfig[′inputcharset′])));//建立请求𝑎𝑙𝑖𝑝𝑎𝑦𝑐𝑜𝑛𝑓𝑖𝑔[′𝑖𝑛𝑝𝑢𝑡𝑐ℎ𝑎𝑟𝑠𝑒𝑡′])));//建立请求 alipaySubmit = new lib\AlipaySubmit(alipayconfig);𝑎𝑙𝑖𝑝𝑎𝑦𝑐𝑜𝑛𝑓𝑖𝑔); html_text = alipaySubmit−>buildRequestForm(𝑎𝑙𝑖𝑝𝑎𝑦𝑆𝑢𝑏𝑚𝑖𝑡−>𝑏𝑢𝑖𝑙𝑑𝑅𝑒𝑞𝑢𝑒𝑠𝑡𝐹𝑜𝑟𝑚( parameter,"get", "确认");
echo $html_text;
}
}
namespace Extend\Alipay;
class Alipay {
public function pay(alipayconfig,
/**************************请求参数**************************/
//支付类型
paymenttype="1";//必填,不能修改//服务器异步通知页面路径
//必填
//付款金额
totalfee=
//必填
//订单描述
body="test";//需以http://开头的完整路径,例如:http://www.商户网址.com/myorder.html//防钓鱼时间戳
//若要使用请调用类文件submit中的query_timestamp函数
//客户端的IP地址
exterinvokeip="";//非局域网的外网IP地址,如:221.0.0.1/∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗///构造要请求的参数数组,无需改动
"service" => "create_direct_pay_by_user",
"partner" => trim(alipayconfig[′partner′]),"sellerid"=>trim(
"payment_type" => paymenttype,"notifyurl"=>
"return_url" => returnurl,"outtradeno"=>
"subject" => subject,"totalfee"=>
"body" => body,"showurl"=>
"anti_phishing_key" => antiphishingkey,"exterinvokeip"=>
"_input_charset" => trim(strtolower(alipayconfig[′inputcharset′])));//建立请求
echo $html_text;
}
}
在config.php配置文件里配置参数
然后新建控制器TextController.class.php
<?php
namespace Home\Controller;
use Think\Controller;
use \Extend\Alipay as Alipays;
class TextController extends Controller {
public function index(){
$this->display();
}
public function dobuy(){
outtradeno=date(′YmdHis′);𝑜𝑢𝑡𝑡𝑟𝑎𝑑𝑒𝑛𝑜=𝑑𝑎𝑡𝑒(′𝑌𝑚𝑑𝐻𝑖𝑠′); baseurl = 'http://'.SERVER[′HTTPHOST′];𝑆𝐸𝑅𝑉𝐸𝑅[′𝐻𝑇𝑇𝑃𝐻𝑂𝑆𝑇′]; args = array(
'out_trade_no'=>outtradeno,′notifyurl′=>𝑜𝑢𝑡𝑡𝑟𝑎𝑑𝑒𝑛𝑜,′𝑛𝑜𝑡𝑖𝑓𝑦𝑢𝑟𝑙′=> baseurl.'/index.php/Home/Text/notifyurl.html',
'return_url'=> baseurl.′/index.php/Home/Text/returnurl.html′,′total′=>𝑏𝑎𝑠𝑒𝑢𝑟𝑙.′/𝑖𝑛𝑑𝑒𝑥.𝑝ℎ𝑝/𝐻𝑜𝑚𝑒/𝑇𝑒𝑥𝑡/𝑟𝑒𝑡𝑢𝑟𝑛𝑢𝑟𝑙.ℎ𝑡𝑚𝑙′,′𝑡𝑜𝑡𝑎𝑙′=> _POST['WIDtotal_fee'],
);
s=newAlipays\Alipay();𝑠=𝑛𝑒𝑤𝐴𝑙𝑖𝑝𝑎𝑦𝑠\Alipay(); s->pay(C('alipay'),$args);
}
// 同步跳转
public function returnurl(){
alipayconfig=C(′alipay′);//计算得出通知验证结果𝑎𝑙𝑖𝑝𝑎𝑦𝑐𝑜𝑛𝑓𝑖𝑔=𝐶(′𝑎𝑙𝑖𝑝𝑎𝑦′);//计算得出通知验证结果 alipayNotify = new Alipays\lib\AlipayNotify(alipayconfig);𝑎𝑙𝑖𝑝𝑎𝑦𝑐𝑜𝑛𝑓𝑖𝑔); verify_result = alipayNotify−>verifyReturn();if(𝑎𝑙𝑖𝑝𝑎𝑦𝑁𝑜𝑡𝑖𝑓𝑦−>𝑣𝑒𝑟𝑖𝑓𝑦𝑅𝑒𝑡𝑢𝑟𝑛();𝑖𝑓( verify_result) {//验证成功
//商户订单号
outtradeno=𝑜𝑢𝑡𝑡𝑟𝑎𝑑𝑒𝑛𝑜= _GET['out_trade_no'];
//支付宝交易号
tradeno=𝑡𝑟𝑎𝑑𝑒𝑛𝑜= _GET['trade_no'];
//交易状态
tradestatus=𝑡𝑟𝑎𝑑𝑒𝑠𝑡𝑎𝑡𝑢𝑠= _GET['trade_status'];
if(GET[′tradestatus′]==′TRADEFINISHED′||𝐺𝐸𝑇[′𝑡𝑟𝑎𝑑𝑒𝑠𝑡𝑎𝑡𝑢𝑠′]==′𝑇𝑅𝐴𝐷𝐸𝐹𝐼𝑁𝐼𝑆𝐻𝐸𝐷′|| _GET['trade_status'] == 'TRADE_SUCCESS') {
//交易成功
}else {
echo "trade_status=".$_GET['trade_status'];
}
echo "验证成功<br />";
}else {
//验证失败
//如要调试,请看alipay_notify.php页面的verifyReturn函数
echo "验证失败";
}
}
// 异步跳转
public function notifyurl(){
alipayconfig=C(′alipay′);//计算得出通知验证结果𝑎𝑙𝑖𝑝𝑎𝑦𝑐𝑜𝑛𝑓𝑖𝑔=𝐶(′𝑎𝑙𝑖𝑝𝑎𝑦′);//计算得出通知验证结果 alipayNotify = new Alipays\AlipayNotify(alipayconfig);𝑎𝑙𝑖𝑝𝑎𝑦𝑐𝑜𝑛𝑓𝑖𝑔); verify_result = alipayNotify−>verifyNotify();if(𝑎𝑙𝑖𝑝𝑎𝑦𝑁𝑜𝑡𝑖𝑓𝑦−>𝑣𝑒𝑟𝑖𝑓𝑦𝑁𝑜𝑡𝑖𝑓𝑦();𝑖𝑓( verify_result) {//验证成功
outtradeno=𝑜𝑢𝑡𝑡𝑟𝑎𝑑𝑒𝑛𝑜= _POST['out_trade_no'];
//支付宝交易号
tradeno=𝑡𝑟𝑎𝑑𝑒𝑛𝑜= _POST['trade_no'];
//交易状态
tradestatus=𝑡𝑟𝑎𝑑𝑒𝑠𝑡𝑎𝑡𝑢𝑠= _POST['trade_status'];
if(POST[′tradestatus′]==′TRADEFINISHED′||𝑃𝑂𝑆𝑇[′𝑡𝑟𝑎𝑑𝑒𝑠𝑡𝑎𝑡𝑢𝑠′]==′𝑇𝑅𝐴𝐷𝐸𝐹𝐼𝑁𝐼𝑆𝐻𝐸𝐷′|| _POST['trade_status'] == 'TRADE_SUCCESS') {
//交易成功
}
echo "success"; //请不要修改或删除
}
else {
//验证失败
echo "fail";
//调试用,写文本函数记录程序运行情况是否正常
//logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
}
}
}
namespace Home\Controller;
use Think\Controller;
use \Extend\Alipay as Alipays;
class TextController extends Controller {
public function index(){
$this->display();
}
public function dobuy(){
outtradeno=date(′YmdHis′);
'out_trade_no'=>outtradeno,′notifyurl′=>
'return_url'=> baseurl.′/index.php/Home/Text/returnurl.html′,′total′=>
);
s=newAlipays\Alipay();
}
// 同步跳转
public function returnurl(){
alipayconfig=C(′alipay′);//计算得出通知验证结果
//商户订单号
outtradeno=
//支付宝交易号
tradeno=
//交易状态
tradestatus=
if(GET[′tradestatus′]==′TRADEFINISHED′||
//交易成功
}else {
echo "trade_status=".$_GET['trade_status'];
}
echo "验证成功<br />";
}else {
//验证失败
//如要调试,请看alipay_notify.php页面的verifyReturn函数
echo "验证失败";
}
}
// 异步跳转
public function notifyurl(){
alipayconfig=C(′alipay′);//计算得出通知验证结果
outtradeno=
//支付宝交易号
tradeno=
//交易状态
tradestatus=
if(POST[′tradestatus′]==′TRADEFINISHED′||
//交易成功
}
echo "success"; //请不要修改或删除
}
else {
//验证失败
echo "fail";
//调试用,写文本函数记录程序运行情况是否正常
//logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");
}
}
}
然后
这样就成功完成简单的支付功能了
手机端:参考
http://www.sucaihuo.com/php/1948.html
原文出处:http://blog.csdn.net/sangjinchao/article/details/54987999
发表评论 取消回复