getOptions($notify_url)); $result = Factory::payment()->app()->pay($body, $order_number, round($money, 2)); $result = $result->toMap(); // 记录日志 $uid = defined('UID') ? UID : ''; platformLog([ 'body' => $body, 'order_number' => $order_number, 'money' => round($money, 2), 'notify_url' => $notify_url ], $result, 'alipaysdk_pay_app_alipay_uid_' . $uid); return $result; } /** * 支付宝小程序支付(接口名称:alipay.trade.create) * @param float $money 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000],金额不能为0 * @param string $order_number 商户网站唯一订单号。由商家自定义,64个字符以内,仅支持字母、数字、下划线且需保证在商户端不重复。 * @param string $buyer_id 买家的支付宝唯一用户号(2088开头的16位纯数字) * @param string $body 订单标题。注意:不可使用特殊字符,如 /,=,& 等。 * @param string $notify_url 支付宝服务器主动通知商户服务器里指定的页面http/https路径。 * @date 2021-10-25 */ public function mpAliPay($money, $order_number, $buyer_id, $body, $notify_url) { Factory::setOptions($this->getOptions($notify_url)); $result = Factory::payment()->common()->create($body, $order_number, round($money, 2), $buyer_id); $result = $result->toMap(); $result['http_body'] = json_decode($result['http_body'], true); // 记录日志 $uid = defined('UID') ? UID : ''; platformLog([ 'body' => $body, 'order_number' => $order_number, 'money' => round($money, 2), 'buyer_id' => $buyer_id, 'notify_url' => $notify_url ], $result['http_body']['alipay_trade_create_response'], 'alipaysdk_pay_mp_alipay_uid_' . $uid); return $result['http_body']['alipay_trade_create_response']; } /** * 支付宝H5支付(接口名称:alipay.trade.wap.pay) * @param float $money 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000],金额不能为0 * @param string $order_number 商户网站唯一订单号。由商家自定义,64个字符以内,仅支持字母、数字、下划线且需保证在商户端不重复。 * @param string $body 订单标题。注意:不可使用特殊字符,如 /,=,& 等。 * @param string $quit_url 用户付款中途退出返回商户网站的地址 * @param string $return_url 支付成功后同步跳转的页面,是一个http/https开头的字符串 * @param string $notify_url 支付宝服务器主动通知商户服务器里指定的页面http/https路径。 * @date 2021-10-25 */ public function h5AliPay($money, $order_number, $body, $quit_url, $return_url, $notify_url) { Factory::setOptions($this->getOptions($notify_url)); $result = Factory::payment()->wap()->pay($body, $order_number, round($money, 2), $quit_url, $return_url); $result = $result->toMap(); // Factory::setOptions($this->getOptions($notify_url)); // // $result = Factory::util()->generic()->sdkExecute('alipay.trade.wap.pay', [], [ // 'out_order_no' => $order_number, // 'total_amount' => round($money, 2), // 'subject' => $body, // 'product_code' => 'QUICK_WAP_WAY', //销售产品码,商家和支付宝签约的产品码。手机网站支付为:QUICK_WAP_WAY // 'quit_url' => $quit_url, // ]); // // $result = $result->toMap(); // 记录日志 $uid = defined('UID') ? UID : ''; platformLog([ 'body' => $body, 'order_number' => $order_number, 'money' => round($money, 2), 'notify_url' => $notify_url, 'quit_url' => $quit_url, 'return_url' => $return_url ], $result, 'alipaysdk_pay_h5_alipay_uid_' . $uid); return $result; } /** * 支付宝订单退款(接口名称:alipay.trade.refund) * @param string $order_number 原订单单号。 * @param string $refund_number 退款单号。商户网站唯一订单号。由商家自定义,64个字符以内,仅支持字母、数字、下划线且需保证在商户端不重复。 * @param float $refund_money 需要退款的金额,该金额不能大于订单金额,单位为元,支持两位小数 * @date 2021-10-28 */ public function refund($order_number, $refund_number, $refund_money) { //20220126 支付退款,如果是部分退款必须要传递退款订单编号 原SDK存在BUG 采用通用接口传值 // Factory::setOptions($this->getOptions()); // // $result = Factory::payment()->common()->refund($order_number, round($refund_money, 2)); // // $result = objectToArray($result); // $result['httpBody'] = objectToArray(json_decode($result['httpBody'])); // // return $result; Factory::setOptions($this->getOptions()); $result = Factory::util()->generic()->execute('alipay.trade.refund', [], [ 'out_trade_no' => $order_number, 'refund_amount' => round($refund_money, 2), 'out_request_no' => $refund_number ]); $result = $result->toMap(); $result['http_body'] = json_decode($result['http_body'], true); // 记录日志 $uid = defined('UID') ? UID : ''; platformLog([ 'out_trade_no' => $order_number, 'refund_amount' => round($refund_money, 2), 'out_request_no' => $refund_number ], $result['http_body']['alipay_trade_refund_response'], 'alipaysdk_pay_refund_uid_' . $uid); return $result['http_body']['alipay_trade_refund_response']; } /** * 线上资金授权冻结窗口(接口名称:alipay.fund.auth.order.app.freeze) * @param float $money 需要冻结的金额,单位为:元(人民币),精确到小数点后两位。取值范围:[0.01,100000000.00] * @param string $order_number 商户授权资金订单号。商家自定义需保证在商户端不重复。仅支持字母、数字、下划线。(商户本次资金操作的请求流水号,用于标示请求流水的唯一性。) * @param string $body 订单标题。业务订单的简单描述,如商品名称等 * @param string $notify_url 支付宝服务器主动通知商户服务器里指定的页面http/https路径。 * @date 2021-10-25 */ public function freeze($money, $order_number, $body, $notify_url) { Factory::setOptions($this->getOptions($notify_url)); $result = Factory::util()->generic()->sdkExecute('alipay.fund.auth.order.app.freeze', [], [ 'out_order_no' => $order_number, 'out_request_no' => $order_number, 'order_title' => $body, 'amount' => round($money, 2), 'product_code' => 'PRE_AUTH_ONLINE', //销售产品码。支付宝预授权产品固定为 PRE_AUTH_ONLINE 'payee_logon_id' => $this->config['payee_logon_id'], //收款账户的支付宝登录号(email或手机号)。如果传入则会校验该登录号对应的账号是否具备当前商户收款权限,如果商户希望用户能够使用花呗,则用户号(payee_user_id)和登录号(payee_logon_id)两者必须传入其一 ]); $result = $result->toMap(); return $result; } /** * 资金授权解冻接口(接口名称:alipay.fund.auth.order.unfreeze) * @param float $money 本次操作解冻的金额,单位为:元(人民币),精确到小数点后两位。 取值范围:[0.01,100000000.00] * @param string $order_number 解冻请求流水号。如果是针对同一笔授权单不同的解冻请求,如第一次解冻1元,第二次解冻2元,则解冻请求流水号必须不重复;如果是针对同一笔解冻请求的多次发起,则需要保证每次发起,解冻请求流水号和解冻金额都相同 * @param string $auth_no 支付宝资金授权订单号。 * @param string $remark 商户对本次解冻操作的附言描述 * @date 2021-10-25 */ public function unfreeze($money, $order_number, $auth_no, $remark) { Factory::setOptions($this->getOptions()); $result = Factory::util()->generic()->execute('alipay.fund.auth.order.unfreeze', [], [ 'auth_no' => $auth_no, 'out_request_no' => $order_number, 'amount' => round($money, 2), 'remark' => $remark, ]); $result = $result->toMap(); $result['http_body'] = json_decode($result['http_body'], true); return $result['http_body']['alipay_fund_auth_order_unfreeze_response']; } /** * 统一收单交易支付接口--预授权支付(接口名称:alipay.trade.pay) * @param float $money 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000] * @param string $order_number 交易创建时传入的商户订单号 * @param string $body 订单标题。订单标题 * @param string $auth_code 支付授权码,即买家的付款码数字 * @param string $notify_url 可不填,有同步返回结果。支付宝服务器主动通知商户服务器里指定的页面http/https路径。 * @date 2021-10-25 */ public function freezePay($money, $order_number, $body, $auth_code, $notify_url = '') { Factory::setOptions($this->getOptions($notify_url)); $result = Factory::util()->generic()->execute('alipay.trade.pay', [], [ 'out_trade_no' => $order_number, 'total_amount' => round($money, 2), 'subject' => $body, 'product_code' => 'PRE_AUTH_ONLINE', 'auth_no' => $auth_code ]); $result = $result->toMap(); $result['http_body'] = json_decode($result['http_body'], true); return $result['http_body']['alipay_trade_pay_response']; } /** * 异步通知验签 * @param array $parameters 接收到的所有参数 * @date 2021-10-25 */ public function verifyNotify($parameters) { Factory::setOptions($this->getOptions()); $result = Factory::payment()->common()->verifyNotify($parameters); // 记录日志 $uid = defined('UID') ? UID : ''; platformLog($parameters, $result, 'alipaysdk_pay_check_sign_uid_' . $uid); return $result; } /** * 资金授权操作查询接口(接口名称:alipay.fund.auth.operation.detail.query) * @param string $order_number 商户的授权资金订单号。该值与资金冻结时 out_order_no一致。(同商户的授权资金操作流水号。) * @date 2021-10-25 */ public function freezeQuery($order_number) { Factory::setOptions($this->getOptions()); $result = Factory::util()->generic()->execute('alipay.fund.auth.operation.detail.query', [], [ 'out_order_no' => $order_number, 'out_request_no' => $order_number, ]); $result = $result->toMap(); $result['http_body'] = json_decode($result['http_body'], true); return $result['http_body']['alipay_fund_auth_operation_detail_query_response']; } }