|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace Org\WeiXinSDK;
|
|
|
|
|
|
|
|
|
|
use Think\Exception;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Weixin
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function weixin_pay($title, $order_no, $pay_amount, $trade_type = "NATIVE", $tt = 1)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
//官方
|
|
|
|
|
|
|
|
|
|
header("Content-type:text/html;charset=utf-8");
|
|
|
|
|
|
|
|
|
|
Vendor("WxPayPubHelper.WxPayPubHelper");
|
|
|
|
|
|
|
|
|
|
// $data['pay_type'] = "weixin";
|
|
|
|
|
|
|
|
|
|
//使用统一支付接口
|
|
|
|
|
if ($tt == 1 || $tt == 4) { //扫码 || 超级签h5
|
|
|
|
|
$notifyy="notify";
|
|
|
|
|
$unifiedOrder = new \UnifiedOrder_pub(C('wei_xin.email'), C('wei_xin.partner'), C('wei_xin.key'));
|
|
|
|
|
|
|
|
|
|
} else if($tt==2) { //sdk,公众号
|
|
|
|
|
$notifyy="notify2";
|
|
|
|
|
$unifiedOrder = new \UnifiedOrder_pub(C('wei_xin_app.email'), C('wei_xin_app.partner'), C('wei_xin_app.key'));
|
|
|
|
|
}else{
|
|
|
|
|
$notifyy="notify3";//3 app支付
|
|
|
|
|
$unifiedOrder = new \UnifiedOrder_pub(C('wei_xin_apps.email'), C('wei_xin_apps.partner'), C('wei_xin_apps.key'));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// $des='平台币充值';
|
|
|
|
|
|
|
|
|
|
$unifiedOrder->setParameter("body", $title);//商品描述
|
|
|
|
|
|
|
|
|
|
//自定义订单号,此处仅作举例
|
|
|
|
|
|
|
|
|
|
$timeStamp = time();
|
|
|
|
|
|
|
|
|
|
$unifiedOrder->setParameter("out_trade_no", $order_no);//商户订单号
|
|
|
|
|
|
|
|
|
|
$unifiedOrder->setParameter("total_fee", $pay_amount * 100);//总金额
|
|
|
|
|
|
|
|
|
|
if($tt==4){
|
|
|
|
|
$unifiedOrder->setParameter("notify_url", "http://" . $_SERVER['HTTP_HOST'] . "/callback.php/Notify/supersign_wxpay_notify");//通知地址
|
|
|
|
|
}else{
|
|
|
|
|
$unifiedOrder->setParameter("notify_url", "http://" . $_SERVER['HTTP_HOST'] . "/callback.php/Notify/wxpay_callback/method/".$notifyy);//通知地址
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$unifiedOrder->setParameter("trade_type", $trade_type);//交易类型
|
|
|
|
|
|
|
|
|
|
$unifiedOrder->setParameter("product_id", $order_no);//商品ID
|
|
|
|
|
if($trade_type=="MWEB"){
|
|
|
|
|
$scene_info['h5_info']=['type'=>'Wap','wap_url'=>"http://" . $_SERVER['HTTP_HOST'],'wap_name'=>'充值'];
|
|
|
|
|
$unifiedOrder->setParameter("scene_info", json_encode($scene_info));//场景信息
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取统一支付接口结果
|
|
|
|
|
|
|
|
|
|
$unifiedOrderResult = $unifiedOrder->getResult($tt);
|
|
|
|
|
|
|
|
|
|
//商户根据实际情况设置相应的处理流程
|
|
|
|
|
|
|
|
|
|
if ($unifiedOrderResult["return_code"] == "FAIL") {
|
|
|
|
|
|
|
|
|
|
//商户自行增加处理流程
|
|
|
|
|
|
|
|
|
|
// echo base64_encode(json_encode(array('status' => 0, 'return_msg' => $unifiedOrderResult['return_msg'])));
|
|
|
|
|
return json_encode(array('status' => 0, 'return_msg' => $unifiedOrderResult['return_msg']));
|
|
|
|
|
|
|
|
|
|
} elseif ($unifiedOrderResult["result_code"] == "FAIL") {
|
|
|
|
|
|
|
|
|
|
//商户自行增加处理流程
|
|
|
|
|
|
|
|
|
|
// echo "错误代码:".$unifiedOrderResult['err_code']."<br>";
|
|
|
|
|
|
|
|
|
|
// echo base64_encode(json_encode(array('status' => 0, 'return_msg' => $unifiedOrderResult['err_code_des'])));
|
|
|
|
|
return json_encode(array('status' => 0, 'return_msg' => $unifiedOrderResult['err_code_des']));
|
|
|
|
|
|
|
|
|
|
} elseif ($unifiedOrderResult["code_url"] != NULL) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//从统一支付接口获取到code_url
|
|
|
|
|
|
|
|
|
|
$code_url = $unifiedOrderResult["code_url"];
|
|
|
|
|
|
|
|
|
|
//商户自行增加处理流程
|
|
|
|
|
|
|
|
|
|
if ($unifiedOrderResult['return_code'] !== "SUCCESS") {
|
|
|
|
|
|
|
|
|
|
\Think\Log::record($unifiedOrderResult['msg']);
|
|
|
|
|
|
|
|
|
|
$html = '<div class="d_body" style="height:px;">
|
|
|
|
|
|
|
|
|
|
<div class="d_content">
|
|
|
|
|
|
|
|
|
|
<div class="text_center">' . $unifiedOrderResult["return_code"] . '</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>';
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
return json_encode(array("status" => 1, 'url' => $unifiedOrderResult['code_url']));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
file_put_contents(dirname(__FILE__).'/$unifiedOrderResult.txt',json_encode($unifiedOrderResult));
|
|
|
|
|
|
|
|
|
|
if ($trade_type == "APP") {
|
|
|
|
|
|
|
|
|
|
$app_data['appid'] = $unifiedOrderResult['appid'];
|
|
|
|
|
|
|
|
|
|
$app_data['partnerid'] = $unifiedOrderResult['mch_id'];
|
|
|
|
|
|
|
|
|
|
$app_data['prepayid'] = $unifiedOrderResult['prepay_id'];
|
|
|
|
|
|
|
|
|
|
$app_data['noncestr'] = $unifiedOrder->createNoncestr();
|
|
|
|
|
|
|
|
|
|
$app_data['timestamp'] = time();
|
|
|
|
|
|
|
|
|
|
$app_data['package'] = "Sign=WXPay";
|
|
|
|
|
|
|
|
|
|
$sign = $unifiedOrder->getSign($app_data);
|
|
|
|
|
|
|
|
|
|
return json_encode(array("status" => 1, 'appid' => $unifiedOrderResult['appid'], 'mch_id' => $unifiedOrderResult['mch_id'], 'prepay_id' => $unifiedOrderResult['prepay_id'], 'time' => $app_data['timestamp'], 'noncestr' => $app_data['noncestr'], 'sign' => $sign));
|
|
|
|
|
|
|
|
|
|
} else if ($trade_type == "MWEB") {
|
|
|
|
|
return json_encode(array("status" => 1, 'mweb_url' => $unifiedOrderResult['mweb_url']));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function weixin_jsapi($title, $order_no, $pay_amount, $jsApi, $openid = "")
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
//官方
|
|
|
|
|
|
|
|
|
|
header("Content-type:text/html;charset=utf-8");
|
|
|
|
|
|
|
|
|
|
Vendor("WxPayPubHelper.WxPayPubHelper");
|
|
|
|
|
|
|
|
|
|
$unifiedOrder = new \UnifiedOrder_pub(C('wei_xin.email'), C('wei_xin.partner'), C('wei_xin.key'));
|
|
|
|
|
|
|
|
|
|
// $des='平台币充值';
|
|
|
|
|
|
|
|
|
|
$unifiedOrder->setParameter("body", $title);//商品描述
|
|
|
|
|
|
|
|
|
|
//自定义订单号,此处仅作举例
|
|
|
|
|
|
|
|
|
|
$timeStamp = time();
|
|
|
|
|
|
|
|
|
|
$unifiedOrder->setParameter("openid", $openid);//商品描述
|
|
|
|
|
|
|
|
|
|
$unifiedOrder->setParameter("out_trade_no", $order_no);//商户订单号
|
|
|
|
|
|
|
|
|
|
$unifiedOrder->setParameter("total_fee", $pay_amount * 100);//总金额
|
|
|
|
|
|
|
|
|
|
$unifiedOrder->setParameter("notify_url", "http://" . $_SERVER['HTTP_HOST'] . "/callback.php/Notify/wxpay_callback/method/notify");//通知地址
|
|
|
|
|
|
|
|
|
|
$unifiedOrder->setParameter("trade_type", "JSAPI");//交易类型
|
|
|
|
|
|
|
|
|
|
$unifiedOrder->setParameter("product_id", $order_no);//商品ID
|
|
|
|
|
|
|
|
|
|
$prepay_id = $unifiedOrder->getPrepayId();
|
|
|
|
|
|
|
|
|
|
//=========步骤3:使用jsapi调起支付============
|
|
|
|
|
$jsApi->setPrepayId($prepay_id);
|
|
|
|
|
$jsApiParameters = $jsApi->getParameters();
|
|
|
|
|
return $jsApiParameters;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 微信退款接口
|
|
|
|
|
* @param $out_trade_no 商户订单号
|
|
|
|
|
* @param $out_refund_no 商户退款单号
|
|
|
|
|
* @param $total_fee 订单金额
|
|
|
|
|
* @param $refund_fee 退款金额
|
|
|
|
|
* @param $op_user_id 操作员帐号, 默认为商户号
|
|
|
|
|
*/
|
|
|
|
|
public function weixin_Refund_pub($out_trade_no, $out_refund_no, $total_fee, $refund_fee, $op_user_id)
|
|
|
|
|
{
|
|
|
|
|
//官方
|
|
|
|
|
header("Content-type:text/html;charset=utf-8");
|
|
|
|
|
Vendor("WxPayPubHelper.WxPayPubHelper");
|
|
|
|
|
// $unifiedOrder = new \Refund_pub(C('wei_xin_app.email'), C('wei_xin_app.partner'), C('wei_xin_app.key'));
|
|
|
|
|
$unifiedOrder = new \Refund_pub(C('wei_xin.email'), C('wei_xin.partner'), C('wei_xin.key'));
|
|
|
|
|
|
|
|
|
|
$unifiedOrder->setParameter("out_trade_no", $out_trade_no);//商户订单号
|
|
|
|
|
$unifiedOrder->setParameter("out_refund_no", $out_refund_no);//商户退款单号
|
|
|
|
|
$unifiedOrder->setParameter("total_fee", $total_fee * 100);//通知地址
|
|
|
|
|
$unifiedOrder->setParameter("refund_fee", $refund_fee * 100);//通知地址
|
|
|
|
|
$unifiedOrder->setParameter("op_user_id", $op_user_id);//交易类型
|
|
|
|
|
//获取退款接口结果
|
|
|
|
|
$unifiedOrderResult = $unifiedOrder->getResult();
|
|
|
|
|
if ($unifiedOrderResult["return_code"] == "FAIL") {
|
|
|
|
|
//商户自行增加处理流程
|
|
|
|
|
return json_encode(array('status' => 0, 'msg' => $unifiedOrderResult['return_msg']));
|
|
|
|
|
} elseif ($unifiedOrderResult["result_code"] == "FAIL") {
|
|
|
|
|
//商户自行增加处理流程
|
|
|
|
|
// echo "错误代码:".$unifiedOrderResult['err_code']."<br>";
|
|
|
|
|
return json_encode(array('status' => 0, 'msg' => $unifiedOrderResult['err_code_des']));
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
//商户自行增加处理流程
|
|
|
|
|
if ($unifiedOrderResult['return_code'] !== "SUCCESS") {
|
|
|
|
|
return json_encode(array("status" => 0, 'msg' => '未知错误'));
|
|
|
|
|
\Think\Log::record($unifiedOrderResult['msg']);
|
|
|
|
|
} else {
|
|
|
|
|
return json_encode(array("status" => 1, 'msg' => '成功'));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 微信退款查询接口
|
|
|
|
|
* @param $out_trade_no 商户订单号
|
|
|
|
|
* @param $out_refund_no 商户退款单号
|
|
|
|
|
* @param $total_fee 订单金额
|
|
|
|
|
* @param $refund_fee 退款金额
|
|
|
|
|
* @param $op_user_id 操作员帐号, 默认为商户号
|
|
|
|
|
*/
|
|
|
|
|
public function weixin_refundquery($out_trade_no)
|
|
|
|
|
{
|
|
|
|
|
//官方
|
|
|
|
|
header("Content-type:text/html;charset=utf-8");
|
|
|
|
|
Vendor("WxPayPubHelper.WxPayPubHelper");
|
|
|
|
|
// $unifiedOrder = new \RefundQuery_pub(C('wei_xin_app.email'), C('wei_xin_app.partner'), C('wei_xin_app.key'));
|
|
|
|
|
$unifiedOrder = new \RefundQuery_pub(C('wei_xin.email'), C('wei_xin.partner'), C('wei_xin.key'));
|
|
|
|
|
|
|
|
|
|
$unifiedOrder->setParameter("out_trade_no", $out_trade_no);//商户订单号
|
|
|
|
|
//获取退款接口结果
|
|
|
|
|
$unifiedOrderResult = $unifiedOrder->getResult();
|
|
|
|
|
if ($unifiedOrderResult["return_code"] == "FAIL") {
|
|
|
|
|
//商户自行增加处理流程
|
|
|
|
|
return $unifiedOrderResult['return_msg'];
|
|
|
|
|
} elseif ($unifiedOrderResult["result_code"] == "FAIL") {
|
|
|
|
|
//商户自行增加处理流程
|
|
|
|
|
return $unifiedOrderResult['err_code_des'];
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
return $unifiedOrderResult['return_code'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 微信查询接口
|
|
|
|
|
* @param $out_trade_no 商户订单号
|
|
|
|
|
* @return string
|
|
|
|
|
* @author 鹿文学
|
|
|
|
|
*/
|
|
|
|
|
public function weixin_orderquery($out_trade_no) {
|
|
|
|
|
header("Content-type:text/html;charset=utf-8");
|
|
|
|
|
Vendor("WxPayPubHelper.WxPayPubHelper");
|
|
|
|
|
$orderquery = new \OrderQuery_pub(C('wei_xin.email'), C('wei_xin.partner'),C('wei_xin.key'));
|
|
|
|
|
$orderquery->setParameter('out_trade_no',$out_trade_no);//商户订单号
|
|
|
|
|
$orderqueryresult = $orderquery->getResult();
|
|
|
|
|
if($orderqueryresult['return_code']=='FAIL') {
|
|
|
|
|
return $orderqueryresult['return_msg'];
|
|
|
|
|
} elseif ($orderqueryresult["result_code"] == "FAIL") {
|
|
|
|
|
//商户自行增加处理流程
|
|
|
|
|
return $orderqueryresult['err_code_des'];
|
|
|
|
|
} elseif ($orderqueryresult['trade_state'] == 'FAIL') {
|
|
|
|
|
return '支付失败';
|
|
|
|
|
} else {
|
|
|
|
|
if($orderqueryresult['trade_state']=='SUCCESS') {
|
|
|
|
|
return $orderqueryresult['out_trade_no'];
|
|
|
|
|
} else {
|
|
|
|
|
return $orderqueryresult['trade_state_desc'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 微信查询接口
|
|
|
|
|
* @param $out_trade_no 商户订单号
|
|
|
|
|
* @return string
|
|
|
|
|
* @author 鹿文学
|
|
|
|
|
*/
|
|
|
|
|
public function weixin_block_orderquery($out_trade_no) {
|
|
|
|
|
header("Content-type:text/html;charset=utf-8");
|
|
|
|
|
Vendor("WxPayPubHelper.WxPayPubHelper");
|
|
|
|
|
$orderquery = new \OrderQuery_pub(C('wei_xin.email'), C('wei_xin.partner'),C('wei_xin.key'));
|
|
|
|
|
$orderquery->setParameter('transaction_id',$out_trade_no);//商户订单号
|
|
|
|
|
$orderqueryresult = $orderquery->getResult();
|
|
|
|
|
if($orderqueryresult['return_code']=='FAIL') {
|
|
|
|
|
return $orderqueryresult['return_msg'];
|
|
|
|
|
} elseif ($orderqueryresult["result_code"] == "FAIL") {
|
|
|
|
|
//商户自行增加处理流程
|
|
|
|
|
return $orderqueryresult['err_code_des'];
|
|
|
|
|
} elseif ($orderqueryresult['trade_state'] == 'FAIL') {
|
|
|
|
|
return '支付失败';
|
|
|
|
|
} else {
|
|
|
|
|
if($orderqueryresult['trade_state']=='SUCCESS') {
|
|
|
|
|
return $orderqueryresult['total_fee']/100;
|
|
|
|
|
} else {
|
|
|
|
|
return $orderqueryresult['trade_state_desc'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|