Commit c8210e4b by yeran

feat: add hsq app pay

1 parent df680436
<?php
namespace Payment\Charge\Hsq;
use Payment\Common\Hsq\Data\BackAppChargeData;
use Payment\Common\Hsq\Data\Charge\AppChargeData;
use Payment\Common\Hsq\HsqBaseStrategy;
use Payment\Common\HsqConfig;
use Payment\Common\PayException;
/**
* HsqAppCharge
*/
class HsqAppCharge extends HsqBaseStrategy
{
public function getBuildDataClass()
{
$this->config->method = HsqConfig::APP_ORDER_URL;
return AppChargeData::class;
}
protected function getReqUrl($url = null)
{
return parent::getReqUrl($url);
}
/**
* 处理支付的返回值。直接返回与微信文档对应的字段
* @param array $ret
*
* @return array $data 包含以下键
*
* ```php
* $data = [
* 'appId' => '', // 公众号id
* 'package' => '', // 订单详情扩展字符串 统一下单接口返回的prepay_id参数值,提交格式如:prepay_id=***
* 'nonceStr' => '', // 随机字符串
* 'timeStamp' => '', // 时间戳
* 'signType' => '', // 签名算法,暂支持MD5
* 'paySign' => '', // 签名
* ];
* ```
*
* @throws PayException
*/
protected function retData(array $ret)
{
$back = new BackAppChargeData($this->config, $ret);
$backData = $back->getData();
unset($backData['sign']);
return $backData;
}
}
...@@ -18,6 +18,7 @@ use Payment\Charge\Cmb\CmbCharge; ...@@ -18,6 +18,7 @@ use Payment\Charge\Cmb\CmbCharge;
use Payment\Charge\Fu\FuBarCharge; use Payment\Charge\Fu\FuBarCharge;
use Payment\Charge\Fu\FuPubCharge; use Payment\Charge\Fu\FuPubCharge;
use Payment\Charge\Fu\FuScanCharge; use Payment\Charge\Fu\FuScanCharge;
use Payment\Charge\Hsq\HsqAppCharge;
use Payment\Charge\LTF\LTFBarCharge; use Payment\Charge\LTF\LTFBarCharge;
use Payment\Charge\LTF\LTFLiteCharge; use Payment\Charge\LTF\LTFLiteCharge;
use Payment\Charge\LTF\LTFPayCharge; use Payment\Charge\LTF\LTFPayCharge;
...@@ -224,7 +225,9 @@ class ChargeContext ...@@ -224,7 +225,9 @@ class ChargeContext
case Config::HSQ_CHANNEL_LITE: case Config::HSQ_CHANNEL_LITE:
$this->channel = new HsqPubCharge($config); $this->channel = new HsqPubCharge($config);
break; break;
case Config::HSQ_CHANNEL_APP:
$this->channel = new HsqAppCharge($config);
break;
default: default:
throw new PayException('当前支持:支付宝、微信、招商一网通、通联支付、米付支付、扫呗支付、富友支付、联拓富、易生支付、微诺付、慧收钱。'); throw new PayException('当前支持:支付宝、微信、招商一网通、通联支付、米付支付、扫呗支付、富友支付、联拓富、易生支付、微诺付、慧收钱。');
......
<?php
namespace Payment\Common\Hsq\Data;
/**
* Class BackPubChargeData
* @package Payment\Common\Hsq\Data
*/
class BackAppChargeData extends HsqBaseData
{
public function getData()
{
if (!empty($this->result)) {
$result = json_decode($this->result, true);
if (!empty($result['qrCode'])) {
$qrCode = json_decode($result['qrCode'], true);
$this->retData['package'] = $qrCode;
}
$this->retData['other'] = [
'channelOrderNo' => '',
'tradeNo' => $result['tradeNo'] ?: '',//慧收钱交易订单号
'transNo' => $result['transNo'] ?: '',//原样返回商户订单号
];
}
return parent::getData();
}
protected function buildData()
{
}
protected function checkDataParam()
{
}
}
...@@ -18,25 +18,6 @@ class BackPubChargeData extends HsqBaseData ...@@ -18,25 +18,6 @@ class BackPubChargeData extends HsqBaseData
{ {
$result = json_decode($this->result,true); $result = json_decode($this->result,true);
// error => Array
// (
// [orderStatus] => FAIL
// [respCode] => 200102
// [respMsg] => 用户ID不能为空
// )
// success => Array
// (
// [channelOrderNo] => 23042623411110491231100567786529
// [orderAmt] => 1
// [orderStatus] => PROCESSING
// [payType] => WECHAT_APPLET
// [qrCode] => {"appId":"wxb63c89abb9243ad0","timeStamp":"1682505329","nonceStr":"9143196887f84ee4a6c62d83f42d844e","package":"prepay_id=wx2618352949503409354c827c2915ab0000","signType":"RSA","paySign":"qDp85A9fHWjLGFpaqmMoRifO9ZHbH6Kfc8X6jxaZ4EKz+OMumFaXMUlAG6tWWl1T6o4dMw35d0O8YvCWseK2V4yXHW0jxcf/0SJ95HD2sPJHtmFeaw7NQGv2jMdAKngewr0pLK9n+EVyNGwfZyCZbg7hzlPK80zD7Sb7/fnaoK0cl5uMwXqOEsE9w1lW4vGUSHEnV/W/R3O/r070ipSYLNG0DXuuisFJIDQexZgV6vbRHs4RyTeOzA7gufWt2ABAGrwcqAVjASdkNx3WPHsNVHCr44YiU6o5C737vn/nqU4d4Clxh+NdK4oFxawbM8McM2UCi0/771hr5w66W35c4A=="}
// [respCode] => 100201
// [respMsg] => 交易处理中,请稍后查询
// [tradeNo] => 25000020230426234103D00000800098
// [transNo] => WechatPay20230426234103
// )
if(!empty($result['qrCode'])) if(!empty($result['qrCode']))
{ {
switch ($result['payType']) switch ($result['payType'])
......
<?php
namespace Payment\Common\Hsq\Data\Charge;
use Payment\Common\PayException;
/**
* Class AppChargeData
* @package Payment\Common\Hsq\Data\Charge
*/
class AppChargeData extends ChargeBaseData
{
/**
* checkDataParam
* @return mixed|void
* @throws PayException
*/
protected function checkDataParam()
{
parent::checkDataParam();
$tradeType = $this->payType;
if (empty($tradeType)) throw new PayException('订单类型有误(支持WECHAT_APPLET、ALI_APPLET)');
$spbillCreateIp = $this->spbillCreateIp;
if (empty($spbillCreateIp)) {
$this->spbillCreateIp = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '127.0.0.1';
}
}
/**
* 构建用于支付的签名相关数据
* @return array|void
*/
protected function buildData()
{
$memo = [
'spbillCreateIp' => $this->spbillCreateIp ?? '127.0.0.1', //终端用户IP
'longitude' => $this->longitude, //经度
'latitude' => $this->latitude, //纬度
];
$signContent = [
'transNo' => $this->transNo, //商户订单号
'payType' => $this->payType, //支付类型
'orderAmt' => intval($this->orderAmt), //交易金额, 交易金额,单位为:分
'goodsInfo' => $this->goodsInfo, //商品信息
'returnUrl' => $this->returnUrl , //后端通知地址, 用户支付完成后,慧收钱服务器主动通知商户服务器里指定地址
'requestDate' => $this->requestDate, //请求时间
'memo' => json_encode($memo,JSON_UNESCAPED_UNICODE),
];
$signData = [
'method' => $this->method,//方法名
'version' => $this->version, //版本
'format' => $this->format, //请求格式
'merchantNo' => $this->merchantNo, //商户号
'signType' => $this->signType, //加密类型
'signContent' => json_encode($signContent,JSON_UNESCAPED_UNICODE),
'key' => $this->key,
];
$this->retData = $signData;
}
}
...@@ -7,7 +7,6 @@ use Payment\Common\BaseStrategy; ...@@ -7,7 +7,6 @@ use Payment\Common\BaseStrategy;
use Payment\Common\PayException; use Payment\Common\PayException;
use Payment\Common\HsqConfig; use Payment\Common\HsqConfig;
use Payment\Utils\Curl; use Payment\Utils\Curl;
use Payment\Utils\DataParser;
abstract class HsqBaseStrategy implements BaseStrategy abstract class HsqBaseStrategy implements BaseStrategy
......
...@@ -10,6 +10,8 @@ final class HsqConfig extends ConfigInterface ...@@ -10,6 +10,8 @@ final class HsqConfig extends ConfigInterface
{ {
public const UNIFIED_URL = 'POLYMERIZE_MAIN_SWEPTN'; //小程序下单 public const UNIFIED_URL = 'POLYMERIZE_MAIN_SWEPTN'; //小程序下单
public const APP_ORDER_URL = 'POLYMERIZE_PROGRAM_CASHIER'; //APP下单
public const QUERY_URL = 'POLYMERIZE_QUERY'; //订单查询 public const QUERY_URL = 'POLYMERIZE_QUERY'; //订单查询
public const REFUND_URL = 'POLYMERIZE_REFUND'; //退款申请 public const REFUND_URL = 'POLYMERIZE_REFUND'; //退款申请
......
...@@ -282,6 +282,8 @@ final class Config{ ...@@ -282,6 +282,8 @@ final class Config{
//========================= 慧收钱相关接口 =======================// //========================= 慧收钱相关接口 =======================//
// 支付常量 // 支付常量
const HSQ_CHANNEL_APP = 'hsq_app'; //小程序支付
const HSQ_CHANNEL_LITE = 'hsq_lite'; //小程序支付 const HSQ_CHANNEL_LITE = 'hsq_lite'; //小程序支付
const HSQ_CHARGE = 'hsq_charge';// 慧收钱支付-统一下单 const HSQ_CHARGE = 'hsq_charge';// 慧收钱支付-统一下单
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!