@@ -7,10 +7,12 @@ $loader->registerFiles([ | |||||
DIR_VENDOR . 'alipay/AopClient.php', | DIR_VENDOR . 'alipay/AopClient.php', | ||||
DIR_VENDOR . 'alipay/AopCertClient.php', | DIR_VENDOR . 'alipay/AopCertClient.php', | ||||
DIR_VENDOR . 'alipay-sdk-php-all-master/aop/AopClient.php', | DIR_VENDOR . 'alipay-sdk-php-all-master/aop/AopClient.php', | ||||
DIR_VENDOR . 'alipay-sdk-php-all-master/aop/EcoAopClient.php', | |||||
DIR_VENDOR . 'alipay-sdk-php-all-master/aop/request/AlipaySystemOauthTokenRequest.php', | DIR_VENDOR . 'alipay-sdk-php-all-master/aop/request/AlipaySystemOauthTokenRequest.php', | ||||
// DIR_VENDOR . 'alipay-sdk-php-all-master/aop/AopCertClient.php', | // DIR_VENDOR . 'alipay-sdk-php-all-master/aop/AopCertClient.php', | ||||
// DIR_VENDOR . 'alipay-sdk-php-all-master/aop/AopEncrypt.php', | // DIR_VENDOR . 'alipay-sdk-php-all-master/aop/AopEncrypt.php', | ||||
DIR_VENDOR . 'alipay-sdk-php-all-master/aop/request/AlipayCommerceEducateFacefeatureGroupkeyQueryRequest.php', | |||||
DIR_VENDOR . 'alipay-sdk-php-all-master/aop/request/AlipayTradeRefundRequest.php', | DIR_VENDOR . 'alipay-sdk-php-all-master/aop/request/AlipayTradeRefundRequest.php', | ||||
DIR_VENDOR . 'alipay-sdk-php-all-master/aop/request/AlipayTradeCreateRequest.php', | DIR_VENDOR . 'alipay-sdk-php-all-master/aop/request/AlipayTradeCreateRequest.php', | ||||
DIR_VENDOR . 'alipay-sdk-php-all-master/aop/request/AlipayTradeQueryRequest.php', | DIR_VENDOR . 'alipay-sdk-php-all-master/aop/request/AlipayTradeQueryRequest.php', | ||||
@@ -4,7 +4,7 @@ namespace SRVX\Api\Controllers\Alipay; | |||||
use SRVX\Api\Controllers\ControllerBase; | use SRVX\Api\Controllers\ControllerBase; | ||||
use SRVX\Msg; | use SRVX\Msg; | ||||
use SRVX\Service\AliBPass\AliEcoService; | |||||
use SRVX\Service\AliBPass\demo\AliEcoService; | |||||
class BPassController extends ControllerBase | class BPassController extends ControllerBase | ||||
@@ -19,6 +19,7 @@ class BPassController extends ControllerBase | |||||
{ | { | ||||
if ($this->request->isPost()) { | if ($this->request->isPost()) { | ||||
$args = $this->request->getJsonRawBody(true); | $args = $this->request->getJsonRawBody(true); | ||||
$result = (new AliEcoService())->alipayPlanetEcocampusApiRosterSignUpInfo( | $result = (new AliEcoService())->alipayPlanetEcocampusApiRosterSignUpInfo( | ||||
$args["face_uid"],$args["parent_uid"], | $args["face_uid"],$args["parent_uid"], | ||||
$args["parent_logon_id"], $args["roster_name"], | $args["parent_logon_id"], $args["roster_name"], | ||||
@@ -35,4 +35,22 @@ class FaceScanPayController extends ControllerBase | |||||
} | } | ||||
} | } | ||||
public function EducateFaceFeatureGroupKeyQueryAction() | |||||
{ | |||||
if ($this->request->isPost()) { | |||||
$args = $this->request->getJsonRawBody(true); | |||||
$result = (new AlipayK12Service([ | |||||
"ali_app_id" => "2021004103604157", | |||||
"ali_private_key" => "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCSGJ9ob4kmGy6y4YeynjKJc/LSg02EXjLErPZSfVrAOy69FTRfBDbazlxpfl6YCAxDdT5ZcspB5kS2XYOY4dmqqPmF4VywmcjmZM8IxZFl1p7YC8BOlP6JrzDPwVl3hn4z3Em1byj8ANLY/AxAaW9W43FSIX+cSfdJThTlxGcbHZFM3kqu++hgFc/E+ar1nB0garqh03ESjatO4b6tuHM57ou7M+fXsoIf3gaL1IDZpeAoRh5sLCBLIbLz55tF0DcOaFsK7NUImnabJDRtrM1IN0lDZkQYAzL+JFsAq+ncRJm60Vd1jq/pXML/cFVHQQgdnjUd2u2NJTSMiCKCftmdAgMBAAECggEARzt+LduEEXJbeJiCI1MC7QX9tSqUFyAevMpgZ6P7JZM1nLfECzfwzwqjAES/Nn1mDVYTCmXvu+XcRtadnWMxUAaHcwGIwgqZa8xnLa220OKuHETOhQIcgWFL+WAakS6gRgT4Y2BJqWV1aJqsFpPR15mZ3SO8JqXhznolsknqw8sO+DBJu+QXn1HdntSGWrLU4GblPlYAs64y/MzPMUWfA4ShDRn9MZK6ypnh2GB5ezgnFxx1jRGOy96IqikI8f+M/CVdgzErLIl+qTd/IbfL8B6Gccb4ZwimL/x1H1bqYCA6xINMZLo5eDHCvBTU4AW7sItw1Q7MQ8l3wBl7hW62gQKBgQDZT1SEaeBtOJxt3vrK7o/kCWNh/4h9oENFhDIuTvLQk9tirKw0BSiZedjbEHqnqM+bgeuvxazCp9uqoYXgC/dtIooy1P8aso+ZrroC/0vZV7TQBGBjbSSkKPn7ShZM2hfYQFpmLznwpel7KJbP6AJ8atv99wjB6uvqNf6fMU7IbQKBgQCsG3mj0amsYbS5ZQZpl2v65QnlkAxv0dxcstx15kW0hXRugLOu7EGcJNZMhO4gbn8dzMOaJANZPG1VLcFpe/QyP/AW7vDt9vTWdeQkQCD5xcXEDihLLCq0pFaSkmuOHWCI+aepSHUILlJ1P/K/5biD7MTdPg6tyLqyM+rjUd/38QKBgQCNu2fsVQHDOsEMB/qakK3YlSb0q61iAjzeAjKYcXV9BHJ6ERTfeN3Z+9asSjs1TqzZSAtoQQ1EiCaFS4P9dNCTpYttS+52gy+VlJhNjCT0RHfxlGkpb+4OA4vHkbKpvTUAHjjXnMW1ZwC5CugSAchdTXTeV1im4Yms4DqJqacwoQKBgQCocPd7An8qTDIBZMOC4oT29+TYvUO+yMkAHLmx1h4QkLCkWegB4g5QkKkAGPWp3hshAj/KA0cXthFXVUG/SGZ2K6eB+nbon1N+9cDETdM4QXzN5gE/mUlupIxqRU1ouI27YYPbJSQNTrC7OkwNzfnpe/gshEj/gr5eHHvd4UrvMQKBgD2Toow7sfpV0R9rhO8aJ9njlbH15LqUK/AotK3E7zr73Uv5j/BIKS4dVC7T56L2khEUbM/y8+Rig6CdyFf3A4i4GKfbp56Sap/Haa9OP6jfep6VW7Aa1AJxPvIPgPZ2U+EuRxrwrP1EBcL5z6Cern9c9Zzs8BPUacU+Q5e8c87W", | |||||
"ali_public_key" => "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzEC7+3O/Ej/gkXug6EgcCM3LjWzz11RR6ESo0KshGg3ODgM8DfdKDHD5b1T6VbcRGFobXQBqVtW008ocUnSOZzE67a73l6mKT3FbmhRsbrgwcUuOHEJUZaLFxPibJgFl7fkOjBcIiz+Wc+9VDTt8O4YxIZhAL6L6ppXcrVrCkOaiIiuHGyp7FjQ+5s3Lk3NLSO3TfXw1WEX2F+IHnw32ZN/FlC8rF8HVlgM0w/PZJ9RuadoLqn5H6z/iqrurbtxscnx0Qbdt8CBzREabJnWxHjxO936AXu9njIPvsXkTfaJJIXxRGGb0b8peSiCljwi8UEODe8mjl2c/LzLel6RuLQIDAQAB" | |||||
]))->alipayCommerceEducateFaceFeatureGroupKeyQuery($args["school_std_code"] ?? ""); | |||||
if (!$result["status"]) { | |||||
$this->api(Msg::NewError($result["data"]["code"] ?? 500, $result["msg"])); | |||||
} | |||||
$this->api($result["data"]); | |||||
} else { | |||||
$this->api(Msg::NewError(500, '提交方式错误!')); | |||||
} | |||||
} | |||||
} | } |
@@ -24,268 +24,26 @@ class CallBackController extends \Phalcon\Mvc\Controller | |||||
$args = $this->request->get(); | $args = $this->request->get(); | ||||
} | } | ||||
/** | |||||
* Todo::支付宝 - 授权回调 | |||||
*/ | |||||
public function alipayAuthorizeCallBackAction() | |||||
{ | |||||
$args = $this->request->get(); | |||||
$this->logger($args, 'alipay_authorize_callBack_action', true); | |||||
if (empty($args['app_id']) || empty($args['app_auth_code']) || empty($args["state"])) { | |||||
dd(['msg' => '缺少参数', 'success' => -1]); | |||||
} | |||||
$result = (new AlipayService())->alipayOpenAuthTokenAppRequest($args['app_auth_code']); | |||||
if ($result["status"] != true) { | |||||
dd((['msg' => '授权失败', 'success' => -2, "result" => $result])); | |||||
} | |||||
$app_id = explode("=", base64_decode($args["state"]))[1]; | |||||
$merchant_sn = explode("=", base64_decode($args["state"]))[0]; | |||||
$uid = explode("_", $merchant_sn)[0]; | |||||
$model = MerchantAlipayAuthorize::findFirst("uid = '{$uid}' AND app_id = '{$app_id}' AND merchant_sn = '{$merchant_sn}'"); | |||||
$model = empty($model) ? new MerchantAlipayAuthorize() : $model; | |||||
$model->uid = $uid; | |||||
$model->app_id = $app_id; | |||||
$model->merchant_sn = $merchant_sn; | |||||
$model->app_auth_token = $result["data"]["tokens"][0]["app_auth_token"]; | |||||
$model->app_refresh_token = $result["data"]["tokens"][0]["app_refresh_token"]; | |||||
$model->ali_app_id = $args['app_id']; | |||||
$model->ali_auth_app_id = $result['data']["tokens"][0]["auth_app_id"]; | |||||
$model->ali_user_id = $result["data"]["tokens"][0]["user_id"]; | |||||
$model->created_at = date("Y-m-d H:i:s"); | |||||
$model->updated_at = date("Y-m-d H:i:s"); | |||||
$model->state = ICommon::MERCHANT_STATE_USE; | |||||
$model->save(); | |||||
dd((['msg' => '授权成功!', 'success' => 0])); | |||||
} | |||||
/** | /** | ||||
* 本系统自身支付回调 - 同步 | |||||
* 支付宝 - 公共网关回调 | |||||
*/ | */ | ||||
public function alipayOwnSyncReturnAction() | |||||
public function alipayCommonCallBackAction() | |||||
{ | { | ||||
dump($_GET); | |||||
$args = $this->request->get(); | $args = $this->request->get(); | ||||
logger(json_encode([ | |||||
"msg" => "同步回调", | |||||
"data" => $args, | |||||
], 320), 'alipay_sync_return', true); | |||||
dd($args); | |||||
} | |||||
/** | |||||
* 本系统自身支付回调 - 异步 | |||||
*/ | |||||
public function alipayOwnSyncNotifyAction() | |||||
{ | |||||
$this->logger($args, 'alipayCommonCallBack', true); | |||||
if ($this->request->isPost()) { | if ($this->request->isPost()) { | ||||
try { | |||||
$verify_result = (new EasyAlipayService())->verifyNotify($_POST); | |||||
logger(json_encode([ | |||||
"msg" => "异步回调", | |||||
"data" => $_POST, | |||||
"res" => $verify_result | |||||
], 320), 'alipay_sync_notify', true); | |||||
if ($verify_result) {//验证成功 | |||||
$out_trade_no = $_POST['out_trade_no']; | |||||
//支付宝交易号 | |||||
$trade_no = $_POST['trade_no']; | |||||
//交易状态 | |||||
$trade_status = $_POST['trade_status']; | |||||
//判断该笔订单是否在 | |||||
$model = OwnOrder::findFirst("out_trade_no = '{$out_trade_no}'"); | |||||
if (!$model) { | |||||
//未查到訂單 | |||||
logger(json_encode([ | |||||
"msg" => "异步回调失败-訂單未查到", | |||||
"data" => $_POST, | |||||
], 320), 'alipay_sync_notify_not_find', true); | |||||
//验证失败 | |||||
echo "fail"; | |||||
die(); | |||||
} | |||||
$model->return_data = json_encode($_POST); | |||||
$model->trade_no = $trade_no; | |||||
$model->updated_at = date("Y-m-d H:i:s"); | |||||
if ($trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') { | |||||
//商户网站中已经做过处理 | |||||
if ($model->status == IPay::PAY_STATE_FOR_ALREADY) { | |||||
logger(json_encode([ | |||||
"msg" => "异步回调成功", | |||||
"data" => $_POST, | |||||
], 320), 'alipay_sync_notify_already', true); | |||||
echo "success"; | |||||
die(); | |||||
} | |||||
$model->status = IPay::PAY_STATE_FOR_ALREADY; | |||||
if ($model->save() == false) { | |||||
logger(json_encode([ | |||||
"msg" => "异步回调-支付成功-更新訂單失敗", | |||||
"data" => $_POST, | |||||
], 320), 'alipay_sync_notify_success_update_fail', true); | |||||
echo "fail"; | |||||
die(); | |||||
} | |||||
logger(json_encode([ | |||||
"msg" => "异步回调支付成功", | |||||
"data" => $_POST, | |||||
], 320), 'alipay_sync_notify_success', true); | |||||
} else { | |||||
$model->status = IPay::PAY_STATE_FOR_FAIL; | |||||
if ($model->save() == false) { | |||||
logger(json_encode([ | |||||
"msg" => "异步回调-支付失敗-更新訂單失敗", | |||||
"data" => $_POST, | |||||
], 320), 'alipay_sync_notify_fail_update_fail', true); | |||||
echo "fail"; | |||||
die(); | |||||
} | |||||
logger(json_encode([ | |||||
"msg" => "异步回调支付失敗", | |||||
"data" => $_POST, | |||||
], 320), 'alipay_sync_notify_fail', true); | |||||
} | |||||
echo "success"; | |||||
die(); | |||||
} else { | |||||
logger(json_encode([ | |||||
"msg" => "异步回调驗證失败", | |||||
"data" => $_POST, | |||||
], 320), 'alipay_sync_notify_verify_fail', true); | |||||
//验证失败 | |||||
echo "fail"; | |||||
die(); | |||||
} | |||||
} catch (\Exception $e) { | |||||
logger(json_encode([ | |||||
"msg" => "异步回调處理异常", | |||||
"data" => $params ?? [], | |||||
"exception" => $e->getMessage() | |||||
], 320), 'alipay_sync_notify_exception', true); | |||||
//回調異常 | |||||
echo "fail"; | |||||
die(); | |||||
} | |||||
$args = $this->request->getJsonRawBody(true); | |||||
$this->logger($args, 'alipayCommonCallBack_post', true); | |||||
} | } | ||||
} | |||||
/** | |||||
* 支付宝 - 公共网关回调 | |||||
*/ | |||||
public function alipayCommonCallBackAction() | |||||
{ | |||||
// if ($this->request->isPost()) { | |||||
// try { | |||||
// $verify_result = (new EasyAlipayService())->verifyNotify($_POST); | |||||
// logger(json_encode([ | |||||
// "msg" => "异步回调", | |||||
// "data" => $_POST, | |||||
// "res" => $verify_result | |||||
// ], 320), 'common_alipay_sync_notify', true); | |||||
// if ($verify_result) {//验证成功 | |||||
// $self_order_sn = $_POST['out_trade_no']; | |||||
// //支付宝交易号 | |||||
// $trade_no = $_POST['trade_no']; | |||||
// //交易状态 | |||||
// $trade_status = $_POST['trade_status']; | |||||
// //判断该笔订单是否在 | |||||
// $model = UserMerchantOrder::findFirst("self_trade_no = '{$self_order_sn}'"); | |||||
// if (!$model) { | |||||
// //未查到訂單 | |||||
// logger(json_encode([ | |||||
// "msg" => "异步回调失败-訂單未查到", | |||||
// "data" => $_POST, | |||||
// ], 320), 'common_alipay_sync_notify_not_find', true); | |||||
// //验证失败 | |||||
// echo "fail"; | |||||
// die(); | |||||
// } | |||||
// $model->return_data = json_encode($_POST); | |||||
// $model->trade_no = $trade_no; | |||||
// $model->updated_at = date("Y-m-d H:i:s"); | |||||
// | |||||
// #TODO::回調第三方平台的 notify_url | |||||
// $passback_params = json_decode(urldecode($_POST["passback_params"]), true); | |||||
// $notify_url = $passback_params["notify_url"]; | |||||
// $out_trade_no = $passback_params["out_trade_no"]; | |||||
// $ext_info = $passback_params["ext_info"] ?? []; | |||||
// $isOk = (new GetPlatformCertificateService())->commonCurlNotifyUrl($notify_url, ["out_trade_no" => $out_trade_no, | |||||
// "trade_no" => $trade_no, | |||||
// "pay_trade_no" => $self_order_sn, | |||||
// "trade_status" => $trade_status, | |||||
// "ext_info" => $ext_info | |||||
// ]); | |||||
// if ($isOk) { | |||||
// if ($trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') { | |||||
// //商户网站中已经做过处理 | |||||
// if ($model->status == IPay::PAY_STATE_FOR_ALREADY) { | |||||
// logger(json_encode([ | |||||
// "msg" => "异步回调成功", | |||||
// "data" => $_POST, | |||||
// ], 320), 'alipay_sync_notify_already', true); | |||||
// echo "success"; | |||||
// die(); | |||||
// } | |||||
// $model->status = IPay::PAY_STATE_FOR_ALREADY; | |||||
// if ($model->save() == false) { | |||||
// logger(json_encode([ | |||||
// "msg" => "异步回调-支付成功-更新訂單失敗", | |||||
// "data" => $_POST, | |||||
// ], 320), 'alipay_sync_notify_success_update_fail', true); | |||||
// echo "fail"; | |||||
// die(); | |||||
// } | |||||
// logger(json_encode([ | |||||
// "msg" => "异步回调支付成功", | |||||
// "data" => $_POST, | |||||
// ], 320), 'alipay_sync_notify_success', true); | |||||
// } else { | |||||
// $model->status = IPay::PAY_STATE_FOR_FAIL; | |||||
// if ($model->save() == false) { | |||||
// logger(json_encode([ | |||||
// "msg" => "异步回调-支付失敗-更新訂單失敗", | |||||
// "data" => $_POST, | |||||
// ], 320), 'alipay_sync_notify_fail_update_fail', true); | |||||
// echo "fail"; | |||||
// die(); | |||||
// } | |||||
// logger(json_encode([ | |||||
// "msg" => "异步回调支付失敗", | |||||
// "data" => $_POST, | |||||
// ], 320), 'alipay_sync_notify_fail', true); | |||||
// } | |||||
// echo "success"; | |||||
// die(); | |||||
// } else { | |||||
// logger(json_encode([ | |||||
// "msg" => "异步回调 - 回調第三方平台失敗", | |||||
// "data" => $_POST, | |||||
// "isOk" => false | |||||
// ], 320), 'alipay_sync_notify_fail', true); | |||||
// echo "fail"; | |||||
// die(); | |||||
// } | |||||
// } else { | |||||
// logger(json_encode([ | |||||
// "msg" => "异步回调驗證失败", | |||||
// "data" => $_POST, | |||||
// ], 320), 'alipay_sync_notify_verify_fail', true); | |||||
// //验证失败 | |||||
// echo "fail"; | |||||
// die(); | |||||
// } | |||||
// } catch (\Exception $e) { | |||||
// logger(json_encode([ | |||||
// "msg" => "异步回调處理异常", | |||||
// "data" => $params ?? [], | |||||
// "exception" => $e->getMessage() | |||||
// ], 320), 'alipay_sync_notify_exception', true); | |||||
// //回調異常 | |||||
// echo "fail"; | |||||
// die(); | |||||
// } | |||||
// } | |||||
exit(json_encode( | |||||
[ | |||||
"alipay_commerce_educate_facefeature_groupkey_query_response" => [ | |||||
"code" => "10000", | |||||
"msg" => "Success", | |||||
"group_key" => "K12_2088323332233424", | |||||
]] | |||||
)); | |||||
} | } | ||||
/** | /** | ||||
@@ -3,62 +3,28 @@ | |||||
namespace SRVX\Service\AliBPass; | namespace SRVX\Service\AliBPass; | ||||
use SRVX\Service\BaseService; | use SRVX\Service\BaseService; | ||||
use AopClient; | |||||
use EcoAopClient; | |||||
class AliEcoService extends BaseService | class AliEcoService extends BaseService | ||||
{ | { | ||||
public $config = \AlipayConfig::class; | |||||
static private $aopClient; | |||||
public $gatewayUrl = 'https://openapi.alipay.com/gateway.do'; | |||||
public $apiVersion = '1.0'; | |||||
public $signType = 'RSA2'; | |||||
public $postCharset = 'UTF-8'; | |||||
public $format = 'json'; | |||||
public $serverUrl = 'https://cloudpaygw.alipay-eco.com'; | |||||
public $appId = ''; | |||||
public $serverUrl = "https://cloudpaygw.alipay-eco.com"; | |||||
public $appId = '20230803121700004722802100016020'; | |||||
public $privateKey = 'MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCSGJ9ob4kmGy6y4YeynjKJc/LSg02EXjLErPZSfVrAOy69FTRfBDbazlxpfl6YCAxDdT5ZcspB5kS2XYOY4dmqqPmF4VywmcjmZM8IxZFl1p7YC8BOlP6JrzDPwVl3hn4z3Em1byj8ANLY/AxAaW9W43FSIX+cSfdJThTlxGcbHZFM3kqu++hgFc/E+ar1nB0garqh03ESjatO4b6tuHM57ou7M+fXsoIf3gaL1IDZpeAoRh5sLCBLIbLz55tF0DcOaFsK7NUImnabJDRtrM1IN0lDZkQYAzL+JFsAq+ncRJm60Vd1jq/pXML/cFVHQQgdnjUd2u2NJTSMiCKCftmdAgMBAAECggEARzt+LduEEXJbeJiCI1MC7QX9tSqUFyAevMpgZ6P7JZM1nLfECzfwzwqjAES/Nn1mDVYTCmXvu+XcRtadnWMxUAaHcwGIwgqZa8xnLa220OKuHETOhQIcgWFL+WAakS6gRgT4Y2BJqWV1aJqsFpPR15mZ3SO8JqXhznolsknqw8sO+DBJu+QXn1HdntSGWrLU4GblPlYAs64y/MzPMUWfA4ShDRn9MZK6ypnh2GB5ezgnFxx1jRGOy96IqikI8f+M/CVdgzErLIl+qTd/IbfL8B6Gccb4ZwimL/x1H1bqYCA6xINMZLo5eDHCvBTU4AW7sItw1Q7MQ8l3wBl7hW62gQKBgQDZT1SEaeBtOJxt3vrK7o/kCWNh/4h9oENFhDIuTvLQk9tirKw0BSiZedjbEHqnqM+bgeuvxazCp9uqoYXgC/dtIooy1P8aso+ZrroC/0vZV7TQBGBjbSSkKPn7ShZM2hfYQFpmLznwpel7KJbP6AJ8atv99wjB6uvqNf6fMU7IbQKBgQCsG3mj0amsYbS5ZQZpl2v65QnlkAxv0dxcstx15kW0hXRugLOu7EGcJNZMhO4gbn8dzMOaJANZPG1VLcFpe/QyP/AW7vDt9vTWdeQkQCD5xcXEDihLLCq0pFaSkmuOHWCI+aepSHUILlJ1P/K/5biD7MTdPg6tyLqyM+rjUd/38QKBgQCNu2fsVQHDOsEMB/qakK3YlSb0q61iAjzeAjKYcXV9BHJ6ERTfeN3Z+9asSjs1TqzZSAtoQQ1EiCaFS4P9dNCTpYttS+52gy+VlJhNjCT0RHfxlGkpb+4OA4vHkbKpvTUAHjjXnMW1ZwC5CugSAchdTXTeV1im4Yms4DqJqacwoQKBgQCocPd7An8qTDIBZMOC4oT29+TYvUO+yMkAHLmx1h4QkLCkWegB4g5QkKkAGPWp3hshAj/KA0cXthFXVUG/SGZ2K6eB+nbon1N+9cDETdM4QXzN5gE/mUlupIxqRU1ouI27YYPbJSQNTrC7OkwNzfnpe/gshEj/gr5eHHvd4UrvMQKBgD2Toow7sfpV0R9rhO8aJ9njlbH15LqUK/AotK3E7zr73Uv5j/BIKS4dVC7T56L2khEUbM/y8+Rig6CdyFf3A4i4GKfbp56Sap/Haa9OP6jfep6VW7Aa1AJxPvIPgPZ2U+EuRxrwrP1EBcL5z6Cern9c9Zzs8BPUacU+Q5e8c87W'; //企业私钥 | public $privateKey = 'MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCSGJ9ob4kmGy6y4YeynjKJc/LSg02EXjLErPZSfVrAOy69FTRfBDbazlxpfl6YCAxDdT5ZcspB5kS2XYOY4dmqqPmF4VywmcjmZM8IxZFl1p7YC8BOlP6JrzDPwVl3hn4z3Em1byj8ANLY/AxAaW9W43FSIX+cSfdJThTlxGcbHZFM3kqu++hgFc/E+ar1nB0garqh03ESjatO4b6tuHM57ou7M+fXsoIf3gaL1IDZpeAoRh5sLCBLIbLz55tF0DcOaFsK7NUImnabJDRtrM1IN0lDZkQYAzL+JFsAq+ncRJm60Vd1jq/pXML/cFVHQQgdnjUd2u2NJTSMiCKCftmdAgMBAAECggEARzt+LduEEXJbeJiCI1MC7QX9tSqUFyAevMpgZ6P7JZM1nLfECzfwzwqjAES/Nn1mDVYTCmXvu+XcRtadnWMxUAaHcwGIwgqZa8xnLa220OKuHETOhQIcgWFL+WAakS6gRgT4Y2BJqWV1aJqsFpPR15mZ3SO8JqXhznolsknqw8sO+DBJu+QXn1HdntSGWrLU4GblPlYAs64y/MzPMUWfA4ShDRn9MZK6ypnh2GB5ezgnFxx1jRGOy96IqikI8f+M/CVdgzErLIl+qTd/IbfL8B6Gccb4ZwimL/x1H1bqYCA6xINMZLo5eDHCvBTU4AW7sItw1Q7MQ8l3wBl7hW62gQKBgQDZT1SEaeBtOJxt3vrK7o/kCWNh/4h9oENFhDIuTvLQk9tirKw0BSiZedjbEHqnqM+bgeuvxazCp9uqoYXgC/dtIooy1P8aso+ZrroC/0vZV7TQBGBjbSSkKPn7ShZM2hfYQFpmLznwpel7KJbP6AJ8atv99wjB6uvqNf6fMU7IbQKBgQCsG3mj0amsYbS5ZQZpl2v65QnlkAxv0dxcstx15kW0hXRugLOu7EGcJNZMhO4gbn8dzMOaJANZPG1VLcFpe/QyP/AW7vDt9vTWdeQkQCD5xcXEDihLLCq0pFaSkmuOHWCI+aepSHUILlJ1P/K/5biD7MTdPg6tyLqyM+rjUd/38QKBgQCNu2fsVQHDOsEMB/qakK3YlSb0q61iAjzeAjKYcXV9BHJ6ERTfeN3Z+9asSjs1TqzZSAtoQQ1EiCaFS4P9dNCTpYttS+52gy+VlJhNjCT0RHfxlGkpb+4OA4vHkbKpvTUAHjjXnMW1ZwC5CugSAchdTXTeV1im4Yms4DqJqacwoQKBgQCocPd7An8qTDIBZMOC4oT29+TYvUO+yMkAHLmx1h4QkLCkWegB4g5QkKkAGPWp3hshAj/KA0cXthFXVUG/SGZ2K6eB+nbon1N+9cDETdM4QXzN5gE/mUlupIxqRU1ouI27YYPbJSQNTrC7OkwNzfnpe/gshEj/gr5eHHvd4UrvMQKBgD2Toow7sfpV0R9rhO8aJ9njlbH15LqUK/AotK3E7zr73Uv5j/BIKS4dVC7T56L2khEUbM/y8+Rig6CdyFf3A4i4GKfbp56Sap/Haa9OP6jfep6VW7Aa1AJxPvIPgPZ2U+EuRxrwrP1EBcL5z6Cern9c9Zzs8BPUacU+Q5e8c87W'; //企业私钥 | ||||
public $alipayPublicKey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuWFuSpwY/2llLhy5Hxkqcc0qQFQOvemkYOI4S43L4qArX4x+DQN1RFuvfGuwOLScBKaoDYHsu9PSoTtcIj4obhhexbWHfelcsouV7Pj4YChrOkOLHAMLDQhGRXaZyXQAJdk2DoBkJ0vBDD/b1gZT8QznPopvuT4Y0rx/a2vK+5B/XV0wUuP2PnpWoPxNSwr7neFWvUdkC7yJJg4zJ1INLYy9TgHH3LKYrsEDbQzPJyMPFhD0zDb36b62q3tQYc1w8JknS6XeXMkX1Tu4zZbAxyIiv3J1FK8y7dtoRi9gLgo0uLsXWDn5AwAlzqfOERgLMWD2r6FE8tOXVbMha6IImQIDAQAB'; //平台公钥 | public $alipayPublicKey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuWFuSpwY/2llLhy5Hxkqcc0qQFQOvemkYOI4S43L4qArX4x+DQN1RFuvfGuwOLScBKaoDYHsu9PSoTtcIj4obhhexbWHfelcsouV7Pj4YChrOkOLHAMLDQhGRXaZyXQAJdk2DoBkJ0vBDD/b1gZT8QznPopvuT4Y0rx/a2vK+5B/XV0wUuP2PnpWoPxNSwr7neFWvUdkC7yJJg4zJ1INLYy9TgHH3LKYrsEDbQzPJyMPFhD0zDb36b62q3tQYc1w8JknS6XeXMkX1Tu4zZbAxyIiv3J1FK8y7dtoRi9gLgo0uLsXWDn5AwAlzqfOERgLMWD2r6FE8tOXVbMha6IImQIDAQAB'; //平台公钥 | ||||
public $aesKey = 'HOrPS0V4BthAPfgSdbHWwy0TwPnC8TQAQZIOjc8vOzI='; //加密密钥 | public $aesKey = 'HOrPS0V4BthAPfgSdbHWwy0TwPnC8TQAQZIOjc8vOzI='; //加密密钥 | ||||
public function __construct() | public function __construct() | ||||
{ | { | ||||
if ((APP_ENV == 'dev')) { | |||||
$this->serverUrl = 'https://dev-cloudpaygw.alipay-eco.com'; | |||||
} | |||||
$this->getConfig(); | |||||
$this->aopClient(); | |||||
} | |||||
private function aopClient() | |||||
{ | |||||
if (!self::$aopClient instanceof AopClient) { | |||||
self::$aopClient = new AopClient($this->config); | |||||
} | |||||
} | |||||
private function getConfig() | |||||
{ | |||||
$alipayConfig = new \AlipayConfig(); | |||||
$alipayConfig->setServerUrl($this->serverUrl); | |||||
$alipayConfig->setAppId($this->appId); | |||||
$alipayConfig->setPrivateKey($this->privateKey); | |||||
$alipayConfig->setFormat($this->format); | |||||
$alipayConfig->setAlipayPublicKey($this->alipayPublicKey); | |||||
$alipayConfig->setCharset($this->postCharset); | |||||
$alipayConfig->setSignType($this->signType); | |||||
$this->config = $alipayConfig; | |||||
// if ((APP_ENV == 'dev')) { | |||||
// $this->serverUrl = 'https://dev-cloudpaygw.alipay-eco.com'; | |||||
// } | |||||
} | } | ||||
/** | /** | ||||
* alipay.planet.ecocampus.api.roster.signUpInfo(签约信息同步) | * alipay.planet.ecocampus.api.roster.signUpInfo(签约信息同步) | ||||
* @param $face_uid string 学生刷脸编号(不可修改) | * @param $face_uid string 学生刷脸编号(不可修改) | ||||
* @param $parent_uid string 家长uid(可修改) 2088122417040252 | |||||
* @param $parent_uid string 家长uid(可修改) 2088122417040252 | |||||
* @param $parent_logon_id string 家长支付宝账号脱敏信息(可修改) | * @param $parent_logon_id string 家长支付宝账号脱敏信息(可修改) | ||||
* @param $roster_name string 学生姓名(可修改) | * @param $roster_name string 学生姓名(可修改) | ||||
* @param $out_roster_code string 外部花名册编号(不可修改) | * @param $out_roster_code string 外部花名册编号(不可修改) | ||||
@@ -71,22 +37,41 @@ class AliEcoService extends BaseService | |||||
public function alipayPlanetEcocampusApiRosterSignUpInfo($face_uid, $parent_uid, $parent_logon_id, $roster_name, $out_roster_code, $school_code, $school_name, $face_open_status = "OFF", $scan_face_pay_status = "OFF"): array | public function alipayPlanetEcocampusApiRosterSignUpInfo($face_uid, $parent_uid, $parent_logon_id, $roster_name, $out_roster_code, $school_code, $school_name, $face_open_status = "OFF", $scan_face_pay_status = "OFF"): array | ||||
{ | { | ||||
$privateKey = $this->privateKey; | |||||
$alipayPublicKey = $this->alipayPublicKey; | |||||
$alipayConfig = new \AlipayConfig(); | |||||
$alipayConfig->setServerUrl($this->serverUrl); //行业云接口地址 | |||||
$alipayConfig->setAppId($this->appId); //行业云上的服务商isv_app_id | |||||
$alipayConfig->setPrivateKey($privateKey); | |||||
$alipayConfig->setFormat("json"); | |||||
$alipayConfig->setAlipayPublicKey($alipayPublicKey); | |||||
$alipayConfig->setCharset("UTF-8"); | |||||
$alipayConfig->setSignType("RSA2"); | |||||
$alipayClient = new EcoAopClient($alipayConfig); | |||||
//加密密钥,仅在接口内容需要加密时生效 | |||||
$alipayClient->encryptKey = $this->aesKey; | |||||
$alipayClient->encryptType = "AES"; | |||||
try { | try { | ||||
$request = new \AlipayPlanetEcocampusApiRosterSignUpInfo(); | $request = new \AlipayPlanetEcocampusApiRosterSignUpInfo(); | ||||
$params = [ | $params = [ | ||||
"face_uid" => $face_uid, | "face_uid" => $face_uid, | ||||
"face_open_status" => $parent_uid, | |||||
"parent_uid" => $parent_logon_id, | |||||
"parent_logon_id" => $roster_name, | |||||
"roster_name" => $out_roster_code, | |||||
"out_roster_code" => $school_code, | |||||
"school_code" => $school_name, | |||||
"school_name" => $face_open_status, | |||||
"face_open_status" => $face_open_status, | |||||
"parent_uid" => $parent_uid, | |||||
"parent_logon_id" => $parent_logon_id, | |||||
"roster_name" => $roster_name, | |||||
"out_roster_code" => $out_roster_code, | |||||
"school_code" => $school_code, | |||||
"school_name" => $school_name, | |||||
"scan_face_pay_status" => $scan_face_pay_status, | "scan_face_pay_status" => $scan_face_pay_status, | ||||
]; | ]; | ||||
$request->setBizContent(json_encode($params)); | $request->setBizContent(json_encode($params)); | ||||
$response = self::$aopClient->execute($request); | |||||
//加密开关,仅在接口内容需要加密时生效 | |||||
$request->setNeedEncrypt(true); | |||||
$response = $alipayClient->execute($request); | |||||
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response"; | $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response"; | ||||
$responseData = json_decode(json_encode($response->$responseNode), true); | $responseData = json_decode(json_encode($response->$responseNode), true); | ||||
if ($responseData['code'] == 10000) { | if ($responseData['code'] == 10000) { | ||||
@@ -0,0 +1,112 @@ | |||||
<?php | |||||
namespace SRVX\Service\AliBPass; | |||||
use SRVX\Service\BaseService; | |||||
use EcoAopClient; | |||||
class AliEcoService extends BaseService | |||||
{ | |||||
static private $config = []; | |||||
static private $aopClient; | |||||
// public $gatewayUrl = 'https://openapi.alipay.com/gateway.do'; | |||||
public $apiVersion = '1.0'; | |||||
public $signType = 'RSA2'; | |||||
public $postCharset = 'UTF-8'; | |||||
public $format = 'json'; | |||||
public $serverUrl = 'https://cloudpaygw.alipay-eco.com'; | |||||
public $appId = '20230803121700004722802100016020'; | |||||
public $privateKey = 'MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCSGJ9ob4kmGy6y4YeynjKJc/LSg02EXjLErPZSfVrAOy69FTRfBDbazlxpfl6YCAxDdT5ZcspB5kS2XYOY4dmqqPmF4VywmcjmZM8IxZFl1p7YC8BOlP6JrzDPwVl3hn4z3Em1byj8ANLY/AxAaW9W43FSIX+cSfdJThTlxGcbHZFM3kqu++hgFc/E+ar1nB0garqh03ESjatO4b6tuHM57ou7M+fXsoIf3gaL1IDZpeAoRh5sLCBLIbLz55tF0DcOaFsK7NUImnabJDRtrM1IN0lDZkQYAzL+JFsAq+ncRJm60Vd1jq/pXML/cFVHQQgdnjUd2u2NJTSMiCKCftmdAgMBAAECggEARzt+LduEEXJbeJiCI1MC7QX9tSqUFyAevMpgZ6P7JZM1nLfECzfwzwqjAES/Nn1mDVYTCmXvu+XcRtadnWMxUAaHcwGIwgqZa8xnLa220OKuHETOhQIcgWFL+WAakS6gRgT4Y2BJqWV1aJqsFpPR15mZ3SO8JqXhznolsknqw8sO+DBJu+QXn1HdntSGWrLU4GblPlYAs64y/MzPMUWfA4ShDRn9MZK6ypnh2GB5ezgnFxx1jRGOy96IqikI8f+M/CVdgzErLIl+qTd/IbfL8B6Gccb4ZwimL/x1H1bqYCA6xINMZLo5eDHCvBTU4AW7sItw1Q7MQ8l3wBl7hW62gQKBgQDZT1SEaeBtOJxt3vrK7o/kCWNh/4h9oENFhDIuTvLQk9tirKw0BSiZedjbEHqnqM+bgeuvxazCp9uqoYXgC/dtIooy1P8aso+ZrroC/0vZV7TQBGBjbSSkKPn7ShZM2hfYQFpmLznwpel7KJbP6AJ8atv99wjB6uvqNf6fMU7IbQKBgQCsG3mj0amsYbS5ZQZpl2v65QnlkAxv0dxcstx15kW0hXRugLOu7EGcJNZMhO4gbn8dzMOaJANZPG1VLcFpe/QyP/AW7vDt9vTWdeQkQCD5xcXEDihLLCq0pFaSkmuOHWCI+aepSHUILlJ1P/K/5biD7MTdPg6tyLqyM+rjUd/38QKBgQCNu2fsVQHDOsEMB/qakK3YlSb0q61iAjzeAjKYcXV9BHJ6ERTfeN3Z+9asSjs1TqzZSAtoQQ1EiCaFS4P9dNCTpYttS+52gy+VlJhNjCT0RHfxlGkpb+4OA4vHkbKpvTUAHjjXnMW1ZwC5CugSAchdTXTeV1im4Yms4DqJqacwoQKBgQCocPd7An8qTDIBZMOC4oT29+TYvUO+yMkAHLmx1h4QkLCkWegB4g5QkKkAGPWp3hshAj/KA0cXthFXVUG/SGZ2K6eB+nbon1N+9cDETdM4QXzN5gE/mUlupIxqRU1ouI27YYPbJSQNTrC7OkwNzfnpe/gshEj/gr5eHHvd4UrvMQKBgD2Toow7sfpV0R9rhO8aJ9njlbH15LqUK/AotK3E7zr73Uv5j/BIKS4dVC7T56L2khEUbM/y8+Rig6CdyFf3A4i4GKfbp56Sap/Haa9OP6jfep6VW7Aa1AJxPvIPgPZ2U+EuRxrwrP1EBcL5z6Cern9c9Zzs8BPUacU+Q5e8c87W'; //企业私钥 | |||||
public $alipayPublicKey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuWFuSpwY/2llLhy5Hxkqcc0qQFQOvemkYOI4S43L4qArX4x+DQN1RFuvfGuwOLScBKaoDYHsu9PSoTtcIj4obhhexbWHfelcsouV7Pj4YChrOkOLHAMLDQhGRXaZyXQAJdk2DoBkJ0vBDD/b1gZT8QznPopvuT4Y0rx/a2vK+5B/XV0wUuP2PnpWoPxNSwr7neFWvUdkC7yJJg4zJ1INLYy9TgHH3LKYrsEDbQzPJyMPFhD0zDb36b62q3tQYc1w8JknS6XeXMkX1Tu4zZbAxyIiv3J1FK8y7dtoRi9gLgo0uLsXWDn5AwAlzqfOERgLMWD2r6FE8tOXVbMha6IImQIDAQAB'; //平台公钥 | |||||
public $aesKey = 'HOrPS0V4BthAPfgSdbHWwy0TwPnC8TQAQZIOjc8vOzI='; //加密密钥 | |||||
public function __construct() | |||||
{ | |||||
if ((APP_ENV == 'dev')) { | |||||
$this->serverUrl = 'https://dev-cloudpaygw.alipay-eco.com'; | |||||
} | |||||
$this->getConfig(); | |||||
$this->aopClient(); | |||||
} | |||||
private function aopClient() | |||||
{ | |||||
if (!self::$aopClient instanceof EcoAopClient) { | |||||
self::$aopClient = new EcoAopClient(self::$config); | |||||
self::$aopClient->appId = self::$config['ali_app_id']; | |||||
//支付宝私钥值 | |||||
self::$aopClient->rsaPrivateKey = self::$config['ali_private_key']; | |||||
//支付宝公钥值 | |||||
self::$aopClient->alipayrsaPublicKey = self::$config['ali_public_key']; | |||||
} | |||||
// self::$aopClient->gatewayUrl = $this->gatewayUrl; | |||||
self::$aopClient->gatewayUrl = $this->serverUrl; | |||||
// self::$aopClient->apiVersion = $this->apiVersion; | |||||
self::$aopClient->signType = $this->signType; | |||||
self::$aopClient->postCharset = $this->postCharset; | |||||
self::$aopClient->format = $this->format; | |||||
} | |||||
private function getConfig() | |||||
{ | |||||
if (empty(self::$config)) { | |||||
self::$config = [ | |||||
"ali_app_id" => $this->appId, | |||||
"ali_private_key" => $this->privateKey, | |||||
"ali_public_key" => $this->alipayPublicKey | |||||
]; | |||||
} | |||||
} | |||||
/** | |||||
* alipay.planet.ecocampus.api.roster.signUpInfo(签约信息同步) | |||||
* @param $face_uid string 学生刷脸编号(不可修改) | |||||
* @param $parent_uid string 家长uid(可修改) 2088122417040252 | |||||
* @param $parent_logon_id string 家长支付宝账号脱敏信息(可修改) | |||||
* @param $roster_name string 学生姓名(可修改) | |||||
* @param $out_roster_code string 外部花名册编号(不可修改) | |||||
* @param $school_code string 学校内标(不可修改) | |||||
* @param $school_name string 学校名称(不可修改) | |||||
* @param $face_open_status string 刷脸开通状态(可修改) | |||||
* @param $scan_face_pay_status string 刷脸支付开通状态(可修改) | |||||
* @return array | |||||
*/ | |||||
public function alipayPlanetEcocampusApiRosterSignUpInfo($face_uid, $parent_uid, $parent_logon_id, $roster_name, $out_roster_code, $school_code, $school_name, $face_open_status = "OFF", $scan_face_pay_status = "OFF"): array | |||||
{ | |||||
try { | |||||
$request = new \AlipayPlanetEcocampusApiRosterSignUpInfo(); | |||||
$params = [ | |||||
"face_uid" => $face_uid, | |||||
"face_open_status" => $parent_uid, | |||||
"parent_uid" => $parent_logon_id, | |||||
"parent_logon_id" => $roster_name, | |||||
"roster_name" => $out_roster_code, | |||||
"out_roster_code" => $school_code, | |||||
"school_code" => $school_name, | |||||
"school_name" => $face_open_status, | |||||
"scan_face_pay_status" => $scan_face_pay_status, | |||||
]; | |||||
$request->setBizContent(json_encode($params)); | |||||
$response = self::$aopClient->execute($request); | |||||
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response"; | |||||
dd($responseNode); | |||||
$responseData = json_decode(json_encode($response->$responseNode), true); | |||||
if ($responseData['code'] == 10000) { | |||||
return $this->returnRes(true, $responseData['msg'], $responseData); | |||||
} else { | |||||
return $this->returnRes(false, ($responseData['sub_msg'] ?? $responseData['msg']), $responseData); | |||||
} | |||||
} catch (\Exception $exception) { | |||||
return $this->returnRes(false, $exception->getMessage()); | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,167 @@ | |||||
<?php | |||||
namespace SRVX\Service\AliBPass\demo; | |||||
require_once 'EcoApiClient.php'; | |||||
use SRVX\Service\BaseService; | |||||
class AliEcoService extends BaseService | |||||
{ | |||||
public $serverUrl = "https://cloudpaygw.alipay-eco.com"; | |||||
public $appId = 'app-230801DJKNnkE66EP582nUi9zt6i'; | |||||
public $privateKey = 'MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCSGJ9ob4kmGy6y4YeynjKJc/LSg02EXjLErPZSfVrAOy69FTRfBDbazlxpfl6YCAxDdT5ZcspB5kS2XYOY4dmqqPmF4VywmcjmZM8IxZFl1p7YC8BOlP6JrzDPwVl3hn4z3Em1byj8ANLY/AxAaW9W43FSIX+cSfdJThTlxGcbHZFM3kqu++hgFc/E+ar1nB0garqh03ESjatO4b6tuHM57ou7M+fXsoIf3gaL1IDZpeAoRh5sLCBLIbLz55tF0DcOaFsK7NUImnabJDRtrM1IN0lDZkQYAzL+JFsAq+ncRJm60Vd1jq/pXML/cFVHQQgdnjUd2u2NJTSMiCKCftmdAgMBAAECggEARzt+LduEEXJbeJiCI1MC7QX9tSqUFyAevMpgZ6P7JZM1nLfECzfwzwqjAES/Nn1mDVYTCmXvu+XcRtadnWMxUAaHcwGIwgqZa8xnLa220OKuHETOhQIcgWFL+WAakS6gRgT4Y2BJqWV1aJqsFpPR15mZ3SO8JqXhznolsknqw8sO+DBJu+QXn1HdntSGWrLU4GblPlYAs64y/MzPMUWfA4ShDRn9MZK6ypnh2GB5ezgnFxx1jRGOy96IqikI8f+M/CVdgzErLIl+qTd/IbfL8B6Gccb4ZwimL/x1H1bqYCA6xINMZLo5eDHCvBTU4AW7sItw1Q7MQ8l3wBl7hW62gQKBgQDZT1SEaeBtOJxt3vrK7o/kCWNh/4h9oENFhDIuTvLQk9tirKw0BSiZedjbEHqnqM+bgeuvxazCp9uqoYXgC/dtIooy1P8aso+ZrroC/0vZV7TQBGBjbSSkKPn7ShZM2hfYQFpmLznwpel7KJbP6AJ8atv99wjB6uvqNf6fMU7IbQKBgQCsG3mj0amsYbS5ZQZpl2v65QnlkAxv0dxcstx15kW0hXRugLOu7EGcJNZMhO4gbn8dzMOaJANZPG1VLcFpe/QyP/AW7vDt9vTWdeQkQCD5xcXEDihLLCq0pFaSkmuOHWCI+aepSHUILlJ1P/K/5biD7MTdPg6tyLqyM+rjUd/38QKBgQCNu2fsVQHDOsEMB/qakK3YlSb0q61iAjzeAjKYcXV9BHJ6ERTfeN3Z+9asSjs1TqzZSAtoQQ1EiCaFS4P9dNCTpYttS+52gy+VlJhNjCT0RHfxlGkpb+4OA4vHkbKpvTUAHjjXnMW1ZwC5CugSAchdTXTeV1im4Yms4DqJqacwoQKBgQCocPd7An8qTDIBZMOC4oT29+TYvUO+yMkAHLmx1h4QkLCkWegB4g5QkKkAGPWp3hshAj/KA0cXthFXVUG/SGZ2K6eB+nbon1N+9cDETdM4QXzN5gE/mUlupIxqRU1ouI27YYPbJSQNTrC7OkwNzfnpe/gshEj/gr5eHHvd4UrvMQKBgD2Toow7sfpV0R9rhO8aJ9njlbH15LqUK/AotK3E7zr73Uv5j/BIKS4dVC7T56L2khEUbM/y8+Rig6CdyFf3A4i4GKfbp56Sap/Haa9OP6jfep6VW7Aa1AJxPvIPgPZ2U+EuRxrwrP1EBcL5z6Cern9c9Zzs8BPUacU+Q5e8c87W'; //企业私钥 | |||||
public $alipayPublicKey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuWFuSpwY/2llLhy5Hxkqcc0qQFQOvemkYOI4S43L4qArX4x+DQN1RFuvfGuwOLScBKaoDYHsu9PSoTtcIj4obhhexbWHfelcsouV7Pj4YChrOkOLHAMLDQhGRXaZyXQAJdk2DoBkJ0vBDD/b1gZT8QznPopvuT4Y0rx/a2vK+5B/XV0wUuP2PnpWoPxNSwr7neFWvUdkC7yJJg4zJ1INLYy9TgHH3LKYrsEDbQzPJyMPFhD0zDb36b62q3tQYc1w8JknS6XeXMkX1Tu4zZbAxyIiv3J1FK8y7dtoRi9gLgo0uLsXWDn5AwAlzqfOERgLMWD2r6FE8tOXVbMha6IImQIDAQAB'; //平台公钥 | |||||
public $aesKey = 'HOrPS0V4BthAPfgSdbHWwy0TwPnC8TQAQZIOjc8vOzI='; //加密密钥 | |||||
public $signType = 'RSA2'; | |||||
public $format = 'json'; | |||||
public $charset = 'UTF-8'; | |||||
/** | |||||
* alipay.planet.ecocampus.api.roster.signUpInfo(签约信息同步) | |||||
* @param $face_uid string 学生刷脸编号(不可修改) | |||||
* @param $parent_uid string 家长uid(可修改) 2088122417040252 | |||||
* @param $parent_logon_id string 家长支付宝账号脱敏信息(可修改) | |||||
* @param $roster_name string 学生姓名(可修改) | |||||
* @param $out_roster_code string 外部花名册编号(不可修改) | |||||
* @param $school_code string 学校内标(不可修改) | |||||
* @param $school_name string 学校名称(不可修改) | |||||
* @param $face_open_status string 刷脸开通状态(可修改) | |||||
* @param $scan_face_pay_status string 刷脸支付开通状态(可修改) | |||||
* @return array | |||||
*/ | |||||
public function alipayPlanetEcocampusApiRosterSignUpInfo($face_uid, $parent_uid, $parent_logon_id, $roster_name, $out_roster_code, $school_code, $school_name, $face_open_status = "OFF", $scan_face_pay_status = "OFF"): array | |||||
{ | |||||
// cleint初始 | |||||
$client = new \EcoApiClient(); | |||||
// 根据环境,选择行星OPENAPI网关地址 | |||||
$client->gatewayUrl = $this->serverUrl; | |||||
$client->rsaPrivateKey = $this->privateKey; | |||||
$client->alipayrsaPublicKey = $this->alipayPublicKey; | |||||
$client->signType = $this->signType; | |||||
$client->format = $this->format; | |||||
// 业务参数 | |||||
$bizContent["face_uid"] = $face_uid; | |||||
$bizContent["parent_uid"] = $parent_uid; | |||||
$bizContent["parentLoginId"] = $parent_logon_id; | |||||
$bizContent["roster_name"] = $roster_name; | |||||
$bizContent["out_roster_code"] = $out_roster_code; | |||||
$bizContent["school_code"] = $school_code; | |||||
$bizContent["school_name"] = $school_name; | |||||
$bizContent["face_open_status"] = $face_open_status; | |||||
$bizContent["scan_face_pay_status"] = $scan_face_pay_status; | |||||
// 指定需要调用的service接口 | |||||
$params["service"] = "alipay.planet.ecocampus.api.roster.signUpInfo"; | |||||
$params["request_id"] = "" . uuid(); | |||||
$params["biz_content"] = json_encode($bizContent); | |||||
$params["version"] = "1.0"; | |||||
// 其他参数 | |||||
$params["charset"] = $this->charset; | |||||
$params["isv_app_id"] = $this->appId; | |||||
$params["utc_timestamp"] = "" . msectime(); | |||||
//获取签名 | |||||
// $sign = $client->generateSign($params, $this->signType); | |||||
// 调用ECOAPI | |||||
$result = $client->call($params); | |||||
var_dump($result); | |||||
$jsonStr = json_encode($result); | |||||
// 响应的签名验证 转成Array 而非 Object | |||||
$resMapData = json_decode($jsonStr, true); | |||||
// 验签 | |||||
$verifyRes = checkResponse($resMapData, $client->alipayrsaPublicKey); | |||||
if ($verifyRes) { | |||||
echo "响应验签成功"; | |||||
} else { | |||||
echo "响应验签失败"; | |||||
} | |||||
return []; | |||||
} | |||||
} | |||||
/** | |||||
* 验签 仅支持 RSA2 | |||||
*/ | |||||
function checkResponse($res, $pubKey) | |||||
{ | |||||
$resSignType = $res['sign_type']; | |||||
if($resSignType != "RSA2"){ | |||||
return false; | |||||
} | |||||
$resSign = $res['sign']; | |||||
$data = $res["response"]; | |||||
nestKsort($data); | |||||
$data = json_encode($data,JSON_UNESCAPED_UNICODE); | |||||
$data = str_replace("[]", "{}", $data); | |||||
$pubKey = "-----BEGIN PUBLIC KEY-----\n" . | |||||
wordwrap($pubKey, 64, "\n", true) . | |||||
"\n-----END PUBLIC KEY-----"; | |||||
$pubKey = openssl_get_publickey($pubKey); | |||||
$resSign = base64_decode($resSign); | |||||
$result = (bool)openssl_verify($data, $resSign, $pubKey, OPENSSL_ALGO_SHA256); | |||||
return $result; | |||||
} | |||||
/** | |||||
* 返回值json字段排序 | |||||
*/ | |||||
function nestKsort(&$data) | |||||
{ | |||||
foreach ($data as $key => &$item) { | |||||
if (is_array($item)) { | |||||
nestKsort($item); | |||||
} | |||||
} | |||||
ksort($data); | |||||
} | |||||
/** | |||||
* 返回当前的毫秒时间戳 | |||||
*/ | |||||
function msectime() | |||||
{ | |||||
list($s1, $s2) = explode(' ', microtime()); | |||||
return (float)sprintf('%.0f', (floatval($s1) + floatval($s2)) * 1000); | |||||
} | |||||
/** | |||||
* 生成UUID | |||||
*/ | |||||
function uuid() | |||||
{ | |||||
$chars = md5(uniqid(mt_rand(), true)); | |||||
$uuid = substr($chars, 0, 8) . '-' | |||||
. substr($chars, 8, 4) . '-' | |||||
. substr($chars, 12, 4) . '-' | |||||
. substr($chars, 16, 4) . '-' | |||||
. substr($chars, 20, 12); | |||||
return $uuid; | |||||
} |
@@ -8,71 +8,71 @@ | |||||
*/ | */ | ||||
/** | |||||
* 加密方法 | |||||
* @param string $str | |||||
* @return string | |||||
*/ | |||||
function encrypt($str, $screct_key) | |||||
{ | |||||
//AES, 128 模式加密数据 CBC | |||||
$screct_key = base64_decode($screct_key); | |||||
$str = trim($str); | |||||
$str = addPKCS7Padding($str); | |||||
//设置全0的IV | |||||
$iv = str_repeat("\0", 16); | |||||
$encrypt_str = openssl_encrypt($str, 'aes-128-cbc', $screct_key, OPENSSL_NO_PADDING, $iv); | |||||
return base64_encode($encrypt_str); | |||||
} | |||||
/** | |||||
* 解密方法 | |||||
* @param string $str | |||||
* @return string | |||||
*/ | |||||
function decrypt($str, $screct_key) | |||||
{ | |||||
//AES, 128 模式加密数据 CBC | |||||
$str = base64_decode($str); | |||||
$screct_key = base64_decode($screct_key); | |||||
//设置全0的IV | |||||
$iv = str_repeat("\0", 16); | |||||
$decrypt_str = openssl_decrypt($str, 'aes-128-cbc', $screct_key, OPENSSL_NO_PADDING, $iv); | |||||
$decrypt_str = stripPKSC7Padding($decrypt_str); | |||||
return $decrypt_str; | |||||
} | |||||
/** | |||||
* 填充算法 | |||||
* @param string $source | |||||
* @return string | |||||
*/ | |||||
function addPKCS7Padding($source) | |||||
{ | |||||
$source = trim($source); | |||||
$block = 16; | |||||
$pad = $block - (strlen($source) % $block); | |||||
if ($pad <= $block) { | |||||
$char = chr($pad); | |||||
$source .= str_repeat($char, $pad); | |||||
} | |||||
return $source; | |||||
} | |||||
/** | |||||
* 移去填充算法 | |||||
* @param string $source | |||||
* @return string | |||||
*/ | |||||
function stripPKSC7Padding($source) | |||||
{ | |||||
$char = substr($source, -1); | |||||
$num = ord($char); | |||||
if ($num == 62) return $source; | |||||
$source = substr($source, 0, -$num); | |||||
return $source; | |||||
} | |||||
///** | |||||
// * 加密方法 | |||||
// * @param string $str | |||||
// * @return string | |||||
// */ | |||||
//function EcoEncrypt($str, $screct_key) | |||||
//{ | |||||
// //AES, 128 模式加密数据 CBC | |||||
// $screct_key = base64_decode($screct_key); | |||||
// $str = trim($str); | |||||
// $str = addPKCS7Padding($str); | |||||
// | |||||
// //设置全0的IV | |||||
// | |||||
// $iv = str_repeat("\0", 16); | |||||
// $encrypt_str = openssl_encrypt($str, 'aes-128-cbc', $screct_key, OPENSSL_NO_PADDING, $iv); | |||||
// return base64_encode($encrypt_str); | |||||
//} | |||||
// | |||||
///** | |||||
// * 解密方法 | |||||
// * @param string $str | |||||
// * @return string | |||||
// */ | |||||
//function decrypt($str, $screct_key) | |||||
//{ | |||||
// //AES, 128 模式加密数据 CBC | |||||
// $str = base64_decode($str); | |||||
// $screct_key = base64_decode($screct_key); | |||||
// | |||||
// //设置全0的IV | |||||
// $iv = str_repeat("\0", 16); | |||||
// $decrypt_str = openssl_decrypt($str, 'aes-128-cbc', $screct_key, OPENSSL_NO_PADDING, $iv); | |||||
// $decrypt_str = stripPKSC7Padding($decrypt_str); | |||||
// return $decrypt_str; | |||||
//} | |||||
// | |||||
///** | |||||
// * 填充算法 | |||||
// * @param string $source | |||||
// * @return string | |||||
// */ | |||||
//function addPKCS7Padding($source) | |||||
//{ | |||||
// $source = trim($source); | |||||
// $block = 16; | |||||
// | |||||
// $pad = $block - (strlen($source) % $block); | |||||
// if ($pad <= $block) { | |||||
// $char = chr($pad); | |||||
// $source .= str_repeat($char, $pad); | |||||
// } | |||||
// return $source; | |||||
//} | |||||
// | |||||
///** | |||||
// * 移去填充算法 | |||||
// * @param string $source | |||||
// * @return string | |||||
// */ | |||||
//function stripPKSC7Padding($source) | |||||
//{ | |||||
// $char = substr($source, -1); | |||||
// $num = ord($char); | |||||
// if ($num == 62) return $source; | |||||
// $source = substr($source, 0, -$num); | |||||
// return $source; | |||||
//} |
@@ -5,7 +5,7 @@ require_once 'EncryptParseItem.php'; | |||||
require_once 'EncryptResponseData.php'; | require_once 'EncryptResponseData.php'; | ||||
require_once 'SignData.php'; | require_once 'SignData.php'; | ||||
class EcoapiClient | |||||
class EcoApiClient | |||||
{ | { | ||||
//应用ID | //应用ID | ||||
public $appId; | public $appId; |
@@ -7,12 +7,12 @@ | |||||
* Time: 下午8:55 | * Time: 下午8:55 | ||||
*/ | */ | ||||
class EncryptParseItem | |||||
{ | |||||
public $startIndex; | |||||
public $endIndex; | |||||
public $encryptContent; | |||||
} | |||||
//class EncryptParseItem | |||||
//{ | |||||
// public $startIndex; | |||||
// | |||||
// public $endIndex; | |||||
// | |||||
// public $encryptContent; | |||||
// | |||||
//} |
@@ -7,10 +7,10 @@ | |||||
* Time: 下午8:51 | * Time: 下午8:51 | ||||
*/ | */ | ||||
class EncryptResponseData | |||||
{ | |||||
public $realContent; | |||||
public $returnContent; | |||||
} | |||||
//class EncryptResponseData | |||||
//{ | |||||
// public $realContent; | |||||
// | |||||
// public $returnContent; | |||||
// | |||||
//} |
@@ -6,10 +6,10 @@ | |||||
* Time: 下午6:21 | * Time: 下午6:21 | ||||
*/ | */ | ||||
class SignData | |||||
{ | |||||
public $signSourceData = null; | |||||
public $sign = null; | |||||
} | |||||
//class SignData | |||||
//{ | |||||
// public $signSourceData = null; | |||||
// | |||||
// public $sign = null; | |||||
// | |||||
//} |
@@ -1,9 +1,9 @@ | |||||
<?php | <?php | ||||
require_once '../EcoapiClient.php'; | |||||
require_once '../EcoApiClient.php'; | |||||
// cleint初始 | // cleint初始 | ||||
$client = new EcoapiClient(); | |||||
$client = new EcoApiClient(); | |||||
// 根据环境,选择行星OPENAPI网关地址 | // 根据环境,选择行星OPENAPI网关地址 | ||||
$client->gatewayUrl = 'http://dev-apigw.alipay-eco.com'; | $client->gatewayUrl = 'http://dev-apigw.alipay-eco.com'; | ||||
$client->rsaPrivateKey = '更换为应用私钥'; | $client->rsaPrivateKey = '更换为应用私钥'; | ||||
@@ -179,4 +179,32 @@ class AlipayK12Service extends BaseService | |||||
} | } | ||||
} | } | ||||
/** | |||||
* alipay.commerce.educate.facepay.apply(人脸开通支付申请) | |||||
* @param $school_stdcode string 学校外标 | |||||
* @return array | |||||
*/ | |||||
public function alipayCommerceEducateFaceFeatureGroupKeyQuery($school_stdcode): array | |||||
{ | |||||
try { | |||||
$request = new \AlipayCommerceEducateFacefeatureGroupkeyQueryRequest(); | |||||
$params = [ | |||||
"school_stdcode" => $school_stdcode, | |||||
"biz_code" => "SCHOOL_PAYMENT", | |||||
]; | |||||
$request->setBizContent(json_encode($params)); | |||||
$response = self::$aopClient->execute($request, null); | |||||
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response"; | |||||
$responseData = json_decode(json_encode($response->$responseNode), true); | |||||
// dd($responseData); | |||||
if ($responseData['code'] == 10000) { | |||||
return $this->returnRes(true, $responseData['msg'], $responseData); | |||||
} else { | |||||
return $this->returnRes(false, ($responseData['sub_msg'] ?? $responseData['msg']), $responseData); | |||||
} | |||||
} catch (\Exception $exception) { | |||||
return $this->returnRes(false, $exception->getMessage()); | |||||
} | |||||
} | |||||
} | } |
@@ -616,7 +616,6 @@ class AopClient | |||||
//返回的HTTP文本不是标准JSON或者XML,记下错误日志 | //返回的HTTP文本不是标准JSON或者XML,记下错误日志 | ||||
if (false === $respWellFormed) { | if (false === $respWellFormed) { | ||||
var_dump(333); | |||||
$this->logCommunicationError($sysParams["method"], $requestUrl, "HTTP_RESPONSE_NOT_WELL_FORMED", $resp); | $this->logCommunicationError($sysParams["method"], $requestUrl, "HTTP_RESPONSE_NOT_WELL_FORMED", $resp); | ||||
return false; | return false; | ||||
} | } | ||||
@@ -5,7 +5,7 @@ | |||||
* @param string $str | * @param string $str | ||||
* @return string | * @return string | ||||
*/ | */ | ||||
function encrypt($str, $screct_key) | |||||
function encrypt256($str, $screct_key) | |||||
{ | { | ||||
//AES, 128 模式加密数据 CBC | //AES, 128 模式加密数据 CBC | ||||
$screct_key = base64_decode($screct_key); | $screct_key = base64_decode($screct_key); | ||||
@@ -24,7 +24,7 @@ function encrypt($str, $screct_key) | |||||
* @param string $str | * @param string $str | ||||
* @return string | * @return string | ||||
*/ | */ | ||||
function decrypt($str, $screct_key) | |||||
function decrypt256($str, $screct_key) | |||||
{ | { | ||||
//AES, 128 模式加密数据 CBC | //AES, 128 模式加密数据 CBC | ||||
$str = base64_decode($str); | $str = base64_decode($str); | ||||
@@ -1,118 +1,118 @@ | |||||
<?php | <?php | ||||
/** | |||||
* ALIPAY API: alipay.commerce.educate.facepay.apply request | |||||
* | |||||
* @author auto create | |||||
* @since 1.0, 2023-07-05 15:51:58 | |||||
*/ | |||||
class AlipayPlanetEcocampusApiRosterSignUpInfo | class AlipayPlanetEcocampusApiRosterSignUpInfo | ||||
{ | { | ||||
/** | |||||
* 人脸开通支付申请 | |||||
**/ | |||||
private $bizContent; | |||||
private $apiParas = array(); | |||||
private $terminalType; | |||||
private $terminalInfo; | |||||
private $prodCode; | |||||
private $apiVersion="1.0"; | |||||
private $notifyUrl; | |||||
private $returnUrl; | |||||
private $needEncrypt=false; | |||||
public function setBizContent($bizContent) | |||||
{ | |||||
$this->bizContent = $bizContent; | |||||
$this->apiParas["biz_content"] = $bizContent; | |||||
} | |||||
public function getBizContent() | |||||
{ | |||||
return $this->bizContent; | |||||
} | |||||
public function getApiMethodName() | |||||
{ | |||||
return "alipay.planet.ecocampus.api.roster.signUpInfo"; | |||||
} | |||||
public function setNotifyUrl($notifyUrl) | |||||
{ | |||||
$this->notifyUrl=$notifyUrl; | |||||
} | |||||
public function getNotifyUrl() | |||||
{ | |||||
return $this->notifyUrl; | |||||
} | |||||
public function setReturnUrl($returnUrl) | |||||
{ | |||||
$this->returnUrl=$returnUrl; | |||||
} | |||||
public function getReturnUrl() | |||||
{ | |||||
return $this->returnUrl; | |||||
} | |||||
public function getApiParas() | |||||
{ | |||||
return $this->apiParas; | |||||
} | |||||
public function getTerminalType() | |||||
{ | |||||
return $this->terminalType; | |||||
} | |||||
public function setTerminalType($terminalType) | |||||
{ | |||||
$this->terminalType = $terminalType; | |||||
} | |||||
public function getTerminalInfo() | |||||
{ | |||||
return $this->terminalInfo; | |||||
} | |||||
public function setTerminalInfo($terminalInfo) | |||||
{ | |||||
$this->terminalInfo = $terminalInfo; | |||||
} | |||||
public function getProdCode() | |||||
{ | |||||
return $this->prodCode; | |||||
} | |||||
public function setProdCode($prodCode) | |||||
{ | |||||
$this->prodCode = $prodCode; | |||||
} | |||||
public function setApiVersion($apiVersion) | |||||
{ | |||||
$this->apiVersion=$apiVersion; | |||||
} | |||||
public function getApiVersion() | |||||
{ | |||||
return $this->apiVersion; | |||||
} | |||||
public function setNeedEncrypt($needEncrypt) | |||||
{ | |||||
$this->needEncrypt=$needEncrypt; | |||||
} | |||||
public function getNeedEncrypt() | |||||
{ | |||||
return $this->needEncrypt; | |||||
} | |||||
} | |||||
private $apiParas = array(); | |||||
private $terminalType; | |||||
private $terminalInfo; | |||||
private $prodCode; | |||||
private $apiVersion="1.0"; | |||||
private $notifyUrl; | |||||
private $returnUrl; | |||||
private $needEncrypt=true; | |||||
private $bizContent; | |||||
/** | |||||
* @return mixed | |||||
*/ | |||||
public function getBizContent() | |||||
{ | |||||
return $this->bizContent; | |||||
} | |||||
/** | |||||
* @param mixed $bizContent | |||||
*/ | |||||
public function setBizContent($bizContent) | |||||
{ | |||||
$this->apiParas["biz_content"] = $bizContent; | |||||
$this->apiParas["service"] = $this->getApiMethodName(); | |||||
$this->bizContent = $bizContent; | |||||
} | |||||
public function getApiMethodName() | |||||
{ | |||||
return "alipay.planet.ecocampus.api.roster.signUpInfo"; | |||||
} | |||||
public function setNotifyUrl($notifyUrl) | |||||
{ | |||||
$this->notifyUrl=$notifyUrl; | |||||
} | |||||
public function getNotifyUrl() | |||||
{ | |||||
return $this->notifyUrl; | |||||
} | |||||
public function setReturnUrl($returnUrl) | |||||
{ | |||||
$this->returnUrl=$returnUrl; | |||||
} | |||||
public function getReturnUrl() | |||||
{ | |||||
return $this->returnUrl; | |||||
} | |||||
public function getApiParas() | |||||
{ | |||||
return $this->apiParas; | |||||
} | |||||
public function getTerminalType() | |||||
{ | |||||
return $this->terminalType; | |||||
} | |||||
public function setTerminalType($terminalType) | |||||
{ | |||||
$this->terminalType = $terminalType; | |||||
} | |||||
public function getTerminalInfo() | |||||
{ | |||||
return $this->terminalInfo; | |||||
} | |||||
public function setTerminalInfo($terminalInfo) | |||||
{ | |||||
$this->terminalInfo = $terminalInfo; | |||||
} | |||||
public function getProdCode() | |||||
{ | |||||
return $this->prodCode; | |||||
} | |||||
public function setProdCode($prodCode) | |||||
{ | |||||
$this->prodCode = $prodCode; | |||||
} | |||||
public function setApiVersion($apiVersion) | |||||
{ | |||||
$this->apiVersion=$apiVersion; | |||||
} | |||||
public function getApiVersion() | |||||
{ | |||||
return $this->apiVersion; | |||||
} | |||||
public function setNeedEncrypt($needEncrypt) | |||||
{ | |||||
$this->needEncrypt=$needEncrypt; | |||||
} | |||||
public function getNeedEncrypt() | |||||
{ | |||||
return $this->needEncrypt; | |||||
} | |||||
} |