tpshop php7,Tpshop学习(7)-支付宝支付集成

Tpshop学习(7)-支付宝支付集成

2018-07-03 14:39:10PHP

学习内容:

https://www.kancloud.cn/tpshop/thinkphp5/272877

Tpshop源码下载地址: http://www.tp-shop.cn/Index/Index/download.html

6c34b809df55f09ec59e81d61b3c6e20.png

支付宝对接你的网站完成支付

https://www.alipay.com/

81fc254066b67c71bfcd8cba3d36954d.png

初步简单的理解支付对接流程

9e9df8b7feda17524d6e8423e7efc104.png

80859838d27be025ee006b4ea67edd81.png

a113ba64d6998352a833121e8a52bddc.png

下面,我们购买一些商品,下一个订单。

手动修改金额用于测试:

66ccee93d3f41b2d43887ed52df485a1.png

5c85506703fac7c3c4e7946b1c0fab05.png

b904c0b8dec677765f808a3ff9dc8148.png

2a975f91a4101034ed10883db4cc58e6.png

a00fc35f7c00e082f1c66269cbaccd3e.png

==

07e1136a57c280b6e65e1ed6391eed5a.png

==

支付宝:

手机网站支付快速接入

https://docs.open.alipay.com/203/105285

![这里写图片描述](https://img-blog.csdn.net/20170812163604810?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGhwZXI4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

看到form提交的网址,下面看Payment类的getCode

class Payment extends Base {

public $payment; // 具体的支付类

public $pay_code; // 具体的支付code

/**

* 析构流函数

*/

public function __construct() {

parent::__construct();

// tpshop 订单支付提交

$pay_radio = $_REQUEST['pay_radio'];

if(!empty($pay_radio))

{

$pay_radio = parse_url_param($pay_radio);

$this->pay_code = $pay_radio['pay_code']; // 支付 code

}

else // 第三方 支付商返回

{

//file_put_contents('./a.html',$_GET,FILE_APPEND);

$this->pay_code = I('get.pay_code');

unset($_GET['pay_code']); // 用完之后删除,以免进入签名判断里面去 导致错误

}

//获取通知的数据

$xml = $GLOBALS['HTTP_RAW_POST_DATA'];

if(empty($this->pay_code))

exit('pay_code 不能为空');

// 导入具体的支付类文件

include_once "plugins/payment/{$this->pay_code}/{$this->pay_code}.class.php"; // D:wampwwwsvn_tpshopwwwpluginspaymentalipayalipayPayment.class.php

$code = ''.$this->pay_code; // alipay

$this->payment = new $code();

}

...

/**

* tpshop 提交支付方式

*/

public function getCode(){

//C('TOKEN_ON',false); // 关闭 TOKEN_ON

header("Content-type:text/html;charset=utf-8");

$order_id = I('order_id/d'); // 订单id

session('order_id',$order_id); // 最近支付的一笔订单 id

// 修改订单的支付方式

$payment_arr = M('Plugin')->where("`type` = 'payment'")->getField("code,name");

M('order')->where("order_id",$order_id)->save(array('pay_code'=>$this->pay_code,'pay_name'=>$payment_arr[$this->pay_code]));

$order = M('order')->where("order_id",$order_id)->find();

if($order['pay_status'] == 1){

$this->error('此订单,已完成支付!');

}

// tpshop 订单支付提交

$pay_radio = $_REQUEST['pay_radio'];

$config_value = parse_url_param($pay_radio); // 类似于 pay_code=alipay&bank_code=CCB-DEBIT 参数

//微信JS支付

if($this->pay_code == 'weixin' && $_SESSION['openid'] && strstr($_SERVER['HTTP_USER_AGENT'],'MicroMessenger')){

$code_str = $this->payment->getJSAPI($order,$config_value);

exit($code_str);

}else{

$code_str = $this->payment->get_code($order,$config_value);

}

$this->assign('code_str',$code_str);

$this->assign('order_id',$order_id);

return $this->fetch('payment'); // 分跳转 和不 跳转

}

再看:

codestr=this->payment->get_code(order,config_value);

/**

* 生成支付代码

* @param array $order 订单信息

* @param array $config_value 支付方式信息

*/

function get_code($order,$config_value)

{

// 接口类型

$service = array(

1 => 'create_partner_trade_by_buyer',//使用担保交易接口

2 => 'create_direct_pay_by_user',//使用即时到帐交易接口

);

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

$parameter = array(

"service" => $service[$this->alipay_config['alipay_pay_method']],// 1 使用担保交易接口 2 使用即时到帐交易接口

"partner" => trim($this->alipay_config['partner']),

"seller_email" => trim($this->alipay_config['seller_email']),

"payment_type" => 1,// 默认值为:1(商品购买)。

"notify_url" => SITE_URL.U('Payment/notifyUrl',array('pay_code'=>'alipay')),//服务器异步通知页面路径 //必填,不能修改

"return_url" => SITE_URL.U('Payment/returnUrl',//页面跳转同步通知页面路径

"out_trade_no" => $order['order_sn'],//商户订单号

"subject" => 'TPshop 商城',//订单名称 可以中文

"total_fee" => $order['order_amount'],//付款金额

"_input_charset"=> trim(strtolower($this->alipay_config['input_charset'])) //字符编码格式 目前支持 gbk 或 utf-8

);

// 如果是支付宝网银支付

if(!empty($config_value['bank_code']))

{

$parameter["paymethod"] = 'bankPay'; // 若要使用纯网关,取值必须是bankPay(网银支付)。如果不设置,默认为directPay(余额支付)。

$parameter["defaultbank"] = $config_value['bank_code'];

$parameter["service"] = 'create_direct_pay_by_user';

}

//建立请求

require_once("lib/alipay_submit.class.php");

$alipaySubmit = new AlipaySubmit($this->alipay_config);

$html_text = $alipaySubmit->buildRequestForm($parameter,"get","确认");

return $html_text;

}

再看:

/**

* 建立请求,以表单HTML形式构造(默认)

* @param $para_temp 请求参数数组

* @param $method 提交方式。两个值可选:post、get

* @param $button_name 确认按钮显示文字

* @return 提交表单HTML文本

*/

function buildRequestForm($para_temp,$method,$button_name) {

//待请求参数数组

$para = $this->buildRequestPara($para_temp);

$sHtml = "

";

while (list ($key,$val) = each ($para)) {

$sHtml.= "";

}

//submit按钮控件请不要含有name属性

$sHtml = $sHtml."

";

$sHtml = $sHtml."";

return $sHtml;

}

然后回到getCode

看跳转到’payment’页面。

里面有:

/**

* 检查订单状态

*/

function ajax_check_pay_status() {

$.ajax({

type: "post",

url: "{:U('Home/Api/check_order_pay_status')}",

data: {master_order_id: "{$master_order_sn}",order_id: "{$order_id}"},

dataType: 'json',

success: function (data) {

if (data.status == 1) {

clearInterval(interval);

alert(interval);

location.href = "{:U('Home/Cart/cart4',array('order_id'=>$order_id,'master_order_sn'=>$master_order_sn))}";

}

}

});

}

var interval = setInterval(ajax_check_pay_status,5000);

意思是每5秒检查一下支付状态。

但看代码,Home/Api/check_order_pay_status,Home下没有Api

可能是没有开源。

就了解到此吧。

==编程是一种美德,是促使一个人不断向上发展的一种原动力==

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值