<?php
namespace Pay; use think\Config; vendor ('Pay.alipay.pagepay.service.AlipayTradeService');
vendor ('Pay.alipay.pagepay.buildermodel.AlipayTradePagePayContentBuilder');
vendor ('Pay.wxpay.lib.WxPay#Api');
vendor ('Pay.wxpay.example.WxPay#NativePay');
vendor ('Pay.wxpay.example.WxPay#JsApiPay');
vendor ('Pay.wxpay.lib.WxPay#Api#php');
vendor ('Pay.wxpay.lib.WxPay#Notify#php');
vendor ('Pay.alipay.aop.AopClient'); class pay{ //全局阿里配置参数
public $alipay_config = null;
public $weixin_config = null;
public function __construct()
{
$this->alipay_config = Config::get('alipay_config');
$this->weixin_config = Config::get ('weixin_config');
} /**
* 电脑手机支付宝支付类
* @author lsw
* @param $trade_no 订单参数
* @param $name 订单名称
* @param $price 订单金钱
* @param $body 内容
* @param $return_url 同步回调地址
* @param $notify_url 异步回调地址
* @access public Alipay
* @throws \Exception
*/
public function Alipay($trade_no,$name,$price,$body='')
{ //商户订单号,商户网站订单系统中唯一订单号,必填
$out_trade_no = trim($trade_no);
//订单名称,必填
$subject = trim($name);
//付款金额,必填
$total_amount = trim($price);
//商品描述,可空
$body = trim($body);
//构造参数
$payRequestBuilder = new \AlipayTradePagePayContentBuilder();
$payRequestBuilder->setBody($body);
$payRequestBuilder->setSubject($subject);
$payRequestBuilder->setTotalAmount($total_amount);
$payRequestBuilder->setOutTradeNo($out_trade_no);
$aop = new \AlipayTradeService($this->alipay_config); /**
* pagePay 电脑网站支付请求
* @param $builder 业务参数,使用buildmodel中的对象生成。
* @param $return_url 同步跳转地址,公网可以访问
* @param $notify_url 异步通知地址,公网可以访问
* @return $response 支付宝返回的信息
*/
$aop->pagePay($payRequestBuilder,$this->alipay_config['return_url'],$this->alipay_config['notify_url']);
echo '支付跳转中'; } /**
* jsapi支付接口
* @author lsw
* @param $trade_no
* @param $name
* @param $money
* @param $body
* @access public WxJspay
* @return mixed
* @throws \WxPayException
*/
public function WxJspay($trade_no,$name,$money,$body)
{ //①、获取用户openid
$tools = new \JsApiPay();
$openId = $tools->GetOpenid();
//②、统一下单
$input = new \WxPayUnifiedOrder();
$input->SetBody($name);
$input->SetAttach($body);
$input->SetOut_trade_no($trade_no);
$input->SetTotal_fee($money);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetNotify_url( $this->weixin_config['notify_url']);
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openId);
$order = \WxPayApi::unifiedOrder($input);
$data['jsApiParameters'] = $tools->GetJsApiParameters($order);
$data['editAddress'] = $tools->GetEditAddressParameters();
return $data;
}
/**
* 微信二维码码支付
* @author lsw
* @param $trade_no 订单号
* @param $name 名称
* @param $body 备注
* @param $money 钱
* @access public Wxpay
* @return string
*/
public function Wxpay($trade_no,$name,$money,$body)
{
//模式一
$notify = new \NativePay();
$input = new \WxPayUnifiedOrder();
$input->SetBody($name);
$input->SetAttach($body);
$input->SetOut_trade_no($trade_no);
$input->SetTotal_fee($money);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetNotify_url($this->weixin_config['notify_url']);
$input->SetTrade_type("NATIVE");
$input->SetProduct_id("123456789");
$result = $notify->GetPayUrl($input);
return 'http://paysdk.weixin.qq.com/example/qrcode.php?data='.urlencode($result["code_url"]);
} /**
* 支付宝支付成功验证
* @author lsw
* @param $arr
* @access public check
* @return bool
* @throws \Exception
*/
public function check($arr)
{
$alipaySevice = new \AlipayTradeService($this->alipay_config);
return $alipaySevice->check($arr);
} public function Queryorder($transaction_id)
{
$input = new \WxPayOrderQuery();
$input->SetTransaction_id($transaction_id);
$result = \WxPayApi::orderQuery($input);
if(array_key_exists("return_code", $result) && array_key_exists("result_code", $result) && $result["return_code"] == "SUCCESS" && $result["result_code"] == "SUCCESS")
{
return $result;
}
return false;
} /**
* 微信验证订单完整性
* @author lsw
* @param $data
* @access public NotifyProcess
* @return bool
*/
public function NotifyProcess($data)
{
if(!array_key_exists("transaction_id", $data)){
echo "输入参数不正确";
return false;
}
//查询订单,判断订单真实性
if($result = $this->Queryorder($data->transaction_id)){
return $result;
}else{
return FALSE;
}
} /**
* 微信返回app参数
* @author lsw
* @param $order_sn
* @param $name
* @param $body
* @param $price
* @param string $openId
* @param string $product_id
* @access public unifiedorder
* @return array
* @throws \WxPayException
*/
public function unifiedorder($order_sn,$name,$body,$price,$openId='', $product_id='')
{
//统一下单
$input = new \WxPayUnifiedOrder();
$input->SetBody($name);
$input->SetAttach($body);
$input->SetOut_trade_no($order_sn);
$input->SetTotal_fee(($price*100));
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetNotify_url($this->weixin_config['notify_url']);
$input->SetTrade_type("APP");
$input->SetOpenid($openId);
$input->SetProduct_id($product_id);
$result = \WxPayApi::unifiedOrder($input);
//二次加密
$resultModel = new \WxPayUnifiedOrder();
$resultModel->values = [
'appid' =>$result['appid'],
'partnerid' =>$result['mch_id'],
'package' =>'Sign=WXPay',
'prepayid' =>$result['prepay_id'],
'noncestr' =>$result['nonce_str'],
'timestamp' =>time (),
];
$data = [
'sign'=>$resultModel->MakeSign (),
'order_sn'=>$order_sn,
'trade_type'=>'APP',
'appid'=>$result['appid'],
'mch_id'=>$result['mch_id'],
'package'=>'Sign=WXPay',
'prepay_id'=>$result['prepay_id'],
'nonce_str'=>$result['nonce_str'],
'timestamp'=>$resultModel->values['timestamp'],
];
return $data;
} public function json($arr) {
$str = json_encode($arr);
$search = "#\\\u([0-9a-f]+)#ie";
$replace = "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))";
return preg_replace($search, $replace, $str);
}
/**
* 支付宝返回app参数
* @author lsw
* @param $name
* @param $order_sn
* @param $price
* @access public return_alipay_app
* @return string
*/
public function return_alipay_app($name,$order_sn,$price)
{
$private_path = Config::get ('alipay_config.merchant_private_key');//私钥路径
//构造业务请求参数的集合(订单信息)
$content = array();
$content['subject'] = $name;
$content['out_trade_no'] = $order_sn;
// $content['timeout_express'] = "".$time."";
$content['total_amount'] = $price;
$content['product_code'] = "QUICK_MSECURITY_PAY";//销售产品码,固定值 $con = json_encode($content, JSON_UNESCAPED_UNICODE);//$content是biz_content的值,将之转化成json字符串
//公共参数
$Client = new \AopClient();//实例化支付宝sdk里面的AopClient类,下单时需要的操作,都在这个类里面
$param['app_id'] = Config::get ('alipay_config.app_id');
$param['method'] = 'alipay.trade.app.pay';//接口名称,固定值
$param['charset'] = 'utf-8';//请求使用的编码格式
$param['sign_type'] = 'RSA2';//商户生成签名字符串所使用的签名算法类型
$param['format'] = 'JSON';//商户生成签名字符串所使用的签名算法类型
$param['timestamp'] = date("Y-m-d H:i:s");//发送请求的时间
$param['version'] = '1.0';//调用的接口版本,固定为:1.0
$param['notify_url'] = Config::get ('alipay_config.notify_url');
$param['biz_content'] = $con;//业务请求参数的集合,长度不限,json格式,即前面一步得到的
$paramStr = $Client->getSignContent($param);//组装请求签名参数
$sign = $Client->alonersaSign($paramStr, $private_path, 'RSA2', false);//生成签名
$param['sign'] = urlencode($sign);
$param['order_str'] = $Client->getSignContentUrlencode($param);//最终请求参数
$param['a_sign'] = $sign;
$param['a_order_str'] = urldecode ($param['order_str']);//最终请求参数
return $param;
}
}

php封装支付的更多相关文章

  1. 支付宝支付-常用支付API详解(查询、退款、提现等)

    所有的接口支持沙盒环境的测试 1.前言 前面几篇文件详细介绍了 支付宝提现.扫码支付.条码支付.Wap支付.App支付 支付宝支付-提现到个人支付宝 支付宝支付-扫码支付 支付宝支付-刷卡支付(条码支 ...

  2. 到处是坑的微信公众号支付开发(java)

    之前公司项目开发中支付是用阿里的支付做的,那叫一个简单,随意:悲催的是,现在公司开发了微信公众号,所以我步入了全是坑的微信支付开发中... ------------------------------ ...

  3. 微信小程序实现支付功能

    小程序支付,没有封装支付代码:直接上一段可用的流程代码吧:微信小程序支付官网文档有详细的说明,这里我就不再赘述啦:客户端js: wx.request({ url:'https://www.xxxx.c ...

  4. 支付宝支付-PC电脑网站支付

    支付产品全面升级(更新时间:2017/05/05 ),若您使用的是老接口,请移步老版本即时到账文档. 支持沙盒环境的测试 此项目已开源欢迎Start.PR.发起Issues一起讨论交流共同进步 htt ...

  5. 微信小程序支付(java后端)

      第一步 进入小程序,下单,请求下单支付,调用小程序登录API来获取Openid(https://mp.weixin.qq.com/debug/w ... .html#wxloginobject), ...

  6. 快速接入PHP微信支付

    微信支付是微信开发中坑最多的一个功能,本文旨在帮助有开发基础的人快速接入微信支付,如果要详细了解微信支付,请看微信支付的开发文档. 再说把开发文档搬到这里来就没必要了.想要快速跑通微信支付的可以继续查 ...

  7. 支付宝支付-常用支付API详解(查询、退款、提现等)-转

    所有的接口支持沙盒环境的测试 1.前言 前面几篇文件详细介绍了 支付宝提现.扫码支付.条码支付.Wap支付.App支付 支付宝支付-提现到个人支付宝 支付宝支付-扫码支付 支付宝支付-刷卡支付(条码支 ...

  8. APP支付 + 退款(JAVA实现)

    首先,你得先有微信开发平台账号密码还需要开通应用,然后还有微信服务商平台商户版账号(这些我都是给产品经理拿的) 其次我认为你先去看一看微信开发平台的文档!  https://pay.weixin.qq ...

  9. Java实现微信小程序支付(支付,提现,退款)

    1.添加WXpayCommon类用以具体实现功能,代码如下: package com.karat.cn.wxCommon; import java.io.IOException; import jav ...

随机推荐

  1. C盘Administrator中 .m2/repository里面是什么

    ${user.home}/.m2/repository文件夹是maven默认的本地仓库地址maven仓库分为远程仓库和本地仓库,当你在pom里配置依赖项目后,maven首先会从本地仓库查找该项目,如果 ...

  2. shell 输入输出重定向

    1. 命令列表: command > file 将输出重定向到file command < file 将输入重定向到file command >> file 将输出以追加的方式 ...

  3. 【IP】DHCP介绍

    DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP ...

  4. qt学习(四)主窗选钮,显示新窗口。

    游戏有选区这个习惯, 当然,我特指<冒险岛>了,有的时候就是打开一个主屏幕上五个按钮让你点击进入, 甚至有的时候进去了还要选哪个频道,游戏服务器都得分区,频道来完成功能.现在我们先进入想选 ...

  5. paper 134:结构张量structure tensor(二)

    根据结构张量能区分图像的平坦区域.边缘区域与角点区域. 此算法也算是计算机科学最重要的32个算法之一了.链接的文章中此算法名称为Strukturtensor算法,不过我搜索了一下,Strukturte ...

  6. app = Flask(__name__) 是个什么东西

    """第一部分,初始化:所有的Flask都必须创建程序实例, web服务器使用wsgi协议,把客户端所有的请求都转发给这个程序实例 程序实例是Flask的对象,一般情况下 ...

  7. cooike和session到底是个啥

    1.为什么需要cookie ?  cookie不属于http协议范围,由于http协议无法保持状态,即无状态属性.但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. co ...

  8. 開啟windows 7 ,10 的熱點功能(無線熱點)

    開啟windows 7 ,10 的熱點功能: 1.首先要確定你的電腦無線芯片有無熱點功能  # netsh wlan show drivers    Hosted network supported ...

  9. react jsx 中使用 switch case 示例

    <div> <span>适用平台:</span> <span>{(() => { switch (currentItems.usePlatform ...

  10. Blazor 组件库 Blazui 开发第一弹【安装入门】

    标签: Blazor Blazui文档 Blazui 传送门 Blazor 组件库 Blazui 开发第一弹[安装入门]https://www.cnblogs.com/wzxinchen/p/1209 ...