|
|
@@ -11,6 +11,8 @@ class Pay
|
|
|
{
|
|
|
$driver = Config::get("payment_system");
|
|
|
switch ($driver) {
|
|
|
+ case "doiampay":
|
|
|
+ return Pay::doiampay_html($user);
|
|
|
case "paymentwall":
|
|
|
return Pay::pmw_html($user);
|
|
|
case 'spay':
|
|
|
@@ -20,12 +22,21 @@ class Pay
|
|
|
case 'f2fpay':
|
|
|
return Pay::f2fpay_html($user);
|
|
|
case 'yftpay':
|
|
|
- return Pay::yftpay_html($user);
|
|
|
+ return Pay::yftpay_html($user);
|
|
|
default:
|
|
|
return "";
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
+ /**
|
|
|
+ * DoiamPay
|
|
|
+ * @param User $user User
|
|
|
+ * @return String HTML
|
|
|
+ */
|
|
|
+ public static function doiampay_html(User $user){
|
|
|
+ return \App\Utils\DoiAMPay::render();
|
|
|
+ }
|
|
|
+
|
|
|
private static function spay_html($user)
|
|
|
{
|
|
|
return '
|
|
|
@@ -45,10 +56,10 @@ class Pay
|
|
|
}
|
|
|
private static function f2fpay_html($user)
|
|
|
{
|
|
|
-
|
|
|
+
|
|
|
return '
|
|
|
<p><i class="icon icon-lg">monetization_on</i> 余额 <font color="red" size="5">'.$user->money.'</font> 元</p>
|
|
|
-
|
|
|
+
|
|
|
<p><img src="/images/qianbai-4.png" height="250" width="200" /></p>
|
|
|
<div class="form-group form-group-label">
|
|
|
<label class="floating-label" for="number">请选择充值金额</label>
|
|
|
@@ -63,7 +74,7 @@ class Pay
|
|
|
</div>
|
|
|
<p></p>
|
|
|
<a class="btn btn-flat waves-attach" id="urlChange" ><span class="icon">local_gas_station</span> 充值</a>
|
|
|
-';
|
|
|
+';
|
|
|
}
|
|
|
private static function yftpay_html($user)
|
|
|
{
|
|
|
@@ -81,9 +92,9 @@ class Pay
|
|
|
<button type="submit" class="btn btn-flat waves-attach" id="yftCoin" ><span class="icon">check</span> 充值</button>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </form>
|
|
|
+ </form>
|
|
|
';
|
|
|
- }
|
|
|
+ }
|
|
|
private static function pmw_html($user)
|
|
|
{
|
|
|
\Paymentwall_Config::getInstance()->set(array(
|
|
|
@@ -165,10 +176,10 @@ class Pay
|
|
|
//查询间隔
|
|
|
'QueryDuration' => "3"
|
|
|
);
|
|
|
-
|
|
|
+
|
|
|
return $config;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public static function alipay_get_qrcode($user, $amount, &$qrPay)
|
|
|
{
|
|
|
//创建订单
|
|
|
@@ -176,60 +187,60 @@ class Pay
|
|
|
$pl->userid = $user->id;
|
|
|
$pl->total = $amount;
|
|
|
$pl->save();
|
|
|
-
|
|
|
+
|
|
|
//获取支付宝接口配置
|
|
|
$config = Pay::get_alipay_config();
|
|
|
-
|
|
|
+
|
|
|
//$timestamp
|
|
|
- /**************************请求参数**************************/
|
|
|
+ /**************************请求参数**************************/
|
|
|
// (必填) 商户网站订单系统中唯一订单号,64个字符以内,只能包含字母、数字、下划线,
|
|
|
// 需保证商户系统端不能重复,建议通过数据库sequence生成,
|
|
|
//$outTradeNo = "qrpay".date('Ymdhis').mt_rand(100,1000);
|
|
|
$outTradeNo = $pl->id;
|
|
|
-
|
|
|
+
|
|
|
// (必填) 订单标题,粗略描述用户的支付目的。如“xxx品牌xxx门店当面付扫码消费”
|
|
|
$subject = "¥".$pl->total." - ".Config::get("appName")." - {$user->user_name}({$user->email})";
|
|
|
-
|
|
|
+
|
|
|
// (必填) 订单总金额,单位为元,不能超过1亿元
|
|
|
// 如果同时传入了【打折金额】,【不可打折金额】,【订单总金额】三者,则必须满足如下条件:【订单总金额】=【打折金额】+【不可打折金额】
|
|
|
$totalAmount = $pl->total;
|
|
|
-
|
|
|
+
|
|
|
// (不推荐使用) 订单可打折金额,可以配合商家平台配置折扣活动,如果订单部分商品参与打折,可以将部分商品总价填写至此字段,默认全部商品可打折
|
|
|
// 如果该值未传入,但传入了【订单总金额】,【不可打折金额】 则该值默认为【订单总金额】- 【不可打折金额】
|
|
|
//String discountableAmount = "1.00"; //
|
|
|
-
|
|
|
+
|
|
|
// (可选) 订单不可打折金额,可以配合商家平台配置折扣活动,如果酒水不参与打折,则将对应金额填写至此字段
|
|
|
// 如果该值未传入,但传入了【订单总金额】,【打折金额】,则该值默认为【订单总金额】-【打折金额】
|
|
|
$undiscountableAmount = "0.01";
|
|
|
-
|
|
|
+
|
|
|
// 卖家支付宝账号ID,用于支持一个签约账号下支持打款到不同的收款账号,(打款到sellerId对应的支付宝账号)
|
|
|
// 如果该字段为空,则默认为与支付宝签约的商户的PID,也就是appid对应的PID
|
|
|
//$sellerId = "";
|
|
|
-
|
|
|
+
|
|
|
// 订单描述,可以对交易或商品进行一个详细地描述,比如填写"购买商品2件共15.00元"
|
|
|
$body = "用户名:".$user->user_name." 用户ID:".$user->id." 用户充值共计".$pl->total."元";
|
|
|
-
|
|
|
+
|
|
|
//商户操作员编号,添加此参数可以为商户操作员做销售统计
|
|
|
$operatorId = "bak_admin0001";
|
|
|
-
|
|
|
+
|
|
|
// (可选) 商户门店编号,通过门店号和商家后台可以配置精准到门店的折扣信息,详询支付宝技术支持
|
|
|
$storeId = "bak_store001";
|
|
|
-
|
|
|
+
|
|
|
// 支付宝的店铺编号
|
|
|
//$alipayStoreId= "2016041400077000000003314986";
|
|
|
-
|
|
|
+
|
|
|
// 业务扩展参数,目前可添加由支付宝分配的系统商编号(通过setSysServiceProviderId方法),系统商开发使用,详情请咨询支付宝技术支持
|
|
|
$providerId = ""; //系统商pid,作为系统商返佣数据提取的依据
|
|
|
$extendParams = new \ExtendParams();
|
|
|
$extendParams->setSysServiceProviderId($providerId);
|
|
|
$extendParamsArr = $extendParams->getExtendParams();
|
|
|
-
|
|
|
+
|
|
|
// 支付超时,线下扫码交易定义为5分钟
|
|
|
$timeExpress = "5m";
|
|
|
-
|
|
|
+
|
|
|
// 商品明细列表,需填写购买商品详细信息,
|
|
|
$goodsDetailList = array();
|
|
|
-
|
|
|
+
|
|
|
// 创建一个商品信息,参数含义分别为商品id(使用国标)、名称、单价(单位为分)、数量,如果需要添加商品类别,详见GoodsDetail
|
|
|
$goods1 = new \GoodsDetail();
|
|
|
$goods1->setGoodsId($pl->total);
|
|
|
@@ -239,10 +250,10 @@ class Pay
|
|
|
//得到商品1明细数组
|
|
|
$goods1Arr = $goods1->getGoodsDetail();
|
|
|
$goodsDetailList = array($goods1Arr);
|
|
|
-
|
|
|
+
|
|
|
//第三方应用授权令牌,商户授权系统商开发模式下使用
|
|
|
$appAuthToken = "";//根据真实值填写
|
|
|
-
|
|
|
+
|
|
|
// 创建请求builder,设置请求参数
|
|
|
$qrPayRequestBuilder = new \AlipayTradePrecreateContentBuilder();
|
|
|
$qrPayRequestBuilder->setOutTradeNo($outTradeNo);
|
|
|
@@ -257,20 +268,20 @@ class Pay
|
|
|
$qrPayRequestBuilder->setOperatorId($operatorId);
|
|
|
//$qrPayRequestBuilder->setAlipayStoreId($alipayStoreId);
|
|
|
$qrPayRequestBuilder->setAppAuthToken($appAuthToken);
|
|
|
-
|
|
|
+
|
|
|
// 调用qrPay方法获取当面付应答
|
|
|
$qrPay = new \AlipayTradeService($config);
|
|
|
$qrPayResult = $qrPay->qrPay($qrPayRequestBuilder);
|
|
|
-
|
|
|
+
|
|
|
return $qrPayResult;
|
|
|
}
|
|
|
private static function f2fpay_gen($user, $amount)
|
|
|
- {
|
|
|
+ {
|
|
|
//$qrPayResult = Pay::query_alipay_order(2017052112230123456);
|
|
|
//return ;
|
|
|
//生成二维码
|
|
|
$qrPayResult = Pay::alipay_get_qrcode($user, $amount, $qrPay);
|
|
|
-
|
|
|
+
|
|
|
// 根据状态值进行业务处理
|
|
|
switch ($qrPayResult->getTradeStatus()){
|
|
|
case "SUCCESS":
|
|
|
@@ -299,12 +310,12 @@ class Pay
|
|
|
echo "请使用其他方式付款。";
|
|
|
break;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
if ($qrPayResult->getTradeStatus()) {
|
|
|
sleep(1);
|
|
|
echo "轮询处理:";
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
return ;
|
|
|
}
|
|
|
public static function getGen($user, $amount)
|
|
|
@@ -318,7 +329,7 @@ class Pay
|
|
|
case 'zfbjk':
|
|
|
return Pay::alipay_html();
|
|
|
case 'f2fpay':
|
|
|
- return Pay::f2fpay_gen($user, $amount);
|
|
|
+ return Pay::f2fpay_gen($user, $amount);
|
|
|
default:
|
|
|
return "";
|
|
|
}
|
|
|
@@ -557,7 +568,7 @@ class Pay
|
|
|
$aop = new \AopClient();
|
|
|
$alipayrsaPublicKey = Config::get("alipay_public_key");
|
|
|
$aop->alipayrsaPublicKey = $alipayrsaPublicKey;
|
|
|
-
|
|
|
+
|
|
|
//获取支付宝返回参数
|
|
|
$arr=$_POST;
|
|
|
//调用验签的方法
|
|
|
@@ -569,7 +580,7 @@ class Pay
|
|
|
$trade_no = $_POST['trade_no'];
|
|
|
//交易状态
|
|
|
$trade_status = $_POST['trade_status'];
|
|
|
-
|
|
|
+
|
|
|
// 查询系统订单
|
|
|
$alipayPID = Config::get("f2fpay_p_id");
|
|
|
if ($_POST['seller_id']!=$alipayPID){
|
|
|
@@ -579,24 +590,24 @@ class Pay
|
|
|
if ($trade == null) {//没有符合的订单,或订单已经处理
|
|
|
exit("success");
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
//订单查询到,处理业务
|
|
|
if($trade_status == 'TRADE_FINISHED'||$trade_status == 'TRADE_SUCCESS') {
|
|
|
-
|
|
|
+
|
|
|
//判断该笔订单是否在商户网站中已经做过处理
|
|
|
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
|
|
|
//请务必判断请求时的total_amount与通知时获取的total_fee为一致的
|
|
|
//如果有做过处理,不执行商户的业务程序
|
|
|
-
|
|
|
+
|
|
|
//注意:
|
|
|
//付款完成后,支付宝系统发送该交易状态通知
|
|
|
//退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
|
|
|
-
|
|
|
+
|
|
|
//更新订单状态
|
|
|
$trade->tradeno = $trade_no;
|
|
|
$trade->status = 1;
|
|
|
$trade->save();
|
|
|
-
|
|
|
+
|
|
|
//更新用户账户
|
|
|
$user=User::find($trade->userid);
|
|
|
$user->money=$user->money+$_POST['total_amount'];
|
|
|
@@ -606,7 +617,7 @@ class Pay
|
|
|
$user->class=1;
|
|
|
}
|
|
|
$user->save();
|
|
|
-
|
|
|
+
|
|
|
//更新充值(捐赠)记录
|
|
|
$codeq=new Code();
|
|
|
$codeq->code="支付宝 充值";
|
|
|
@@ -621,7 +632,7 @@ class Pay
|
|
|
$gift_user=User::where("id", "=", $user->ref_by)->first();
|
|
|
$gift_user->money=($gift_user->money+($codeq->number*(Config::get('code_payback')/100)));
|
|
|
$gift_user->save();
|
|
|
-
|
|
|
+
|
|
|
$Payback=new Payback();
|
|
|
$Payback->total=$_POST['total_amount'];
|
|
|
$Payback->userid=$user->id;
|
|
|
@@ -630,7 +641,7 @@ class Pay
|
|
|
$Payback->datetime=time();
|
|
|
$Payback->save();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
if (Config::get('enable_donate') == 'true') {
|
|
|
if ($user->is_hide == 1) {
|
|
|
Telegram::Send("一位不愿透露姓名的大老爷给我们捐了 ".$codeq->number." 元!");
|
|
|
@@ -638,7 +649,7 @@ class Pay
|
|
|
Telegram::Send($user->user_name." 大老爷给我们捐了 ".$codeq->number." 元!");
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
//业务处理完毕,向支付宝系统返回成功
|
|
|
echo "success"; //请不要修改或删除
|
|
|
}
|
|
|
@@ -651,7 +662,7 @@ class Pay
|
|
|
{
|
|
|
$driver = Config::get("payment_system");
|
|
|
switch ($driver) {
|
|
|
- case "paymentwall":
|
|
|
+ case "paymentwall":
|
|
|
return Pay::pmw_callback();
|
|
|
case 'spay':
|
|
|
return Pay::spay_callback();
|
|
|
@@ -664,4 +675,4 @@ class Pay
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
-}
|
|
|
+}
|