//统一下单
public function pay(){
if($_GET['gid']!=''){
vendor('Ali.wappay.buildermodel.AlipayTradeWapPayContentBuilder');
vendor('Ali.wappay.service.AlipayTradeService');
$payRequestBuilder = new \AlipayTradeWapPayContentBuilder();
$config=C('config');
//找出对应商品信息
$data=M('drink_shop_goods')->where(array('id'=>$_GET['gid'],'mac_id'=>$_SESSION['mac_id']))->find();
$machine=M('drink_machine')->where(array('init_code'=>$_SESSION['mac_id']))->find();
if(!$machine){
return;
}
//商户订单号,商户网站订单系统中唯一订单号,必填
$out_trade_no=date('Ymd').rand(1000,9999).substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 5, 13), 1))), 4, 12);
//订单名称,必填
$subject='凹凸帮';
//付款金额,必填
//$total_amount='0.01';
$total_amount=$data['shop_good_price'];
//商品描述,可空
$body='凹凸帮情趣用品';
//添加数据库
$map['out_trade_no']=$out_trade_no;
$map['shop_good_name']=$data['shop_good_name'];
$map['shop_good_price']=$data['shop_good_price'];
$map['create_time']=time();
$map['init_price']=$data['init_price'];
$map['pay_way']='支付宝';
$map['box']=$data['box'];
$map['mac_id']=$data['mac_id'];
$map['owner']=$machine['owner'];
$map['fxs_name']= $machine['owner'];
$oid=M('drink_sold_goods')->add($map);
//超时时间
$timeout_express="1m";
$return_url="http://syatb.veiding.com/home/alipay/return_url";
$notify_url="http://syatb.veiding.com/home/alipay/notify_url";
$payRequestBuilder = new \AlipayTradeWapPayContentBuilder();
$payRequestBuilder->setBody($body);
$payRequestBuilder->setSubject($subject);
$payRequestBuilder->setOutTradeNo($out_trade_no);
$payRequestBuilder->setTotalAmount($total_amount);
$payRequestBuilder->setTimeExpress($timeout_express);
$payResponse = new \AlipayTradeService($config);
$result=$payResponse->wapPay($payRequestBuilder,$return_url,$notify_url);
return ;
}
}
//支付宝页面跳转同步通知页面
public function return_url(){
vendor('Ali.wappay.service.AlipayTradeService');
$config=C('config');
$arr=$_GET;
$alipaySevice = new \AlipayTradeService($config);
$result = $alipaySevice->check($arr);
//file_put_contents('./ali_check.txt',var_export($_GET,true));
/* 实际验证过程建议商户添加以下校验。
1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)
4、验证app_id是否为该商户本身。
*/
if($result) {//验证成功
//请在这里加上商户的业务逻辑程序代码
//——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表
$url="http://syatb.veiding.com/home/test/new_index?mac_id=".$_SESSION['mac_id'];
header("Location:".$url);
//商户订单号
//$out_trade_no = htmlspecialchars($_GET['out_trade_no']);
//支付宝交易号
// $trade_no = htmlspecialchars($_GET['trade_no']);
//echo "验证成功<br />外部订单号:".$out_trade_no;
//——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
/
}else {
//验证失败
echo "验证失败";
}
}
//支付宝服务器异步通知页面
public function notify_url(){
vendor('Ali.wappay.service.AlipayTradeService');
$config=C('config');
$arr=$_POST;
$alipaySevice = new \AlipayTradeService($config);
//$alipaySevice->writeLog(var_export($_POST,true));
$result = $alipaySevice->check($arr);
/* 实际验证过程建议商户添加以下校验。
1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)
4、验证app_id是否为该商户本身。
*/
if($result) {//验证成功
/
//请在这里加上商户的业务逻辑程序代
//——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
//获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
if($_POST['trade_status'] == 'TRADE_SUCCESS'){
//商户订单号
$out_trade_no = $_POST['out_trade_no'];
if($res=M('drink_sold_goods')->where(array('out_trade_no'=>$out_trade_no))->find()){
if($res['shop_good_price']==$_POST['invoice_amount'] && $_POST['seller_email']=='791936365@qq.com'){
//修改订单状态
M('drink_sold_goods')->where(array('out_trade_no'=>$out_trade_no))->save(array('sold_status'=>'已支付','noncestr'=>$_POST['notify_id']));
//查询机台
$machine=M('drink_machine')->where(array('init_code'=>$res['mac_id']))->field('client_id')->find();
//发送出货指令
$url="http://syatb.veiding.com/Alisend.php?client_id=".$machine['client_id']."&box=".$res['box']."&oid=".$res['id']."&noncestr=".$_POST['notify_id'];
$yap=$this->http_get($url);
}
}
}
echo "success"; //请不要修改或删除
}else {
//验证失败
echo "fail"; //请不要修改或删除
}
}
//退款
public function order_refund(){
if($_GET['oid']!==''){
vendor('Ali.wappay.service.AlipayTradeService');
vendor('Ali.wappay.buildermodel.AlipayTradeRefundContentBuilder.php');
$config=C('config');
//商户订单号和支付宝交易号不能同时为空。 trade_no、 out_trade_no如果同时存在优先取trade_no
$res=M('drink_sold_goods')->where(array('id'=>$_GET['oid']))->find();
//商户订单号,和支付宝交易号二选一
$out_trade_no = $res['out_trade_no'];
//退款金额,不能大于订单总金额
$refund_amount=$res['shop_good_price']; //退款的原因说明
$refund_reason='出货失败';
//标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传。
$out_request_no=date('YmdHis');
$RequestBuilder = new \AlipayTradeRefundContentBuilder();
//$RequestBuilder->setTradeNo($trade_no);
$RequestBuilder->setOutTradeNo($out_trade_no);
$RequestBuilder->setRefundAmount($refund_amount);
$RequestBuilder->setRefundReason($refund_reason);
$RequestBuilder->setOutRequestNo($out_request_no);
$Response = new \AlipayTradeService($config);
$result=$Response->Refund($RequestBuilder);
file_put_contents('alirefund.txt',$result);
}
}
thinkphp支付宝手机支付流程提示
最新推荐文章于 2024-08-26 08:38:10 发布