PHP 支付宝支付、订阅支付(周期扣款)整理汇总

    <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/kdoc_html_views-1a98987dfd.css">
    <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-25cebea3f9.css">
            <div id="content_views" class="markdown_views prism-tomorrow-night">
                <svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
                    <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
                </svg>
                <p>最近项目中需要使用支付宝的周期扣款,整理一下各种封装方法</p> 

APP支付(服务端

    /******************************************************
     * 调用方法
     ******************************************************/
    function test_pay()
    {
        $isSubscribe = 1;
    <span class="token variable">$price</span> <span class="token operator">=</span> <span class="token number">0.01</span><span class="token punctuation">;</span>
    <span class="token variable">$detail</span> <span class="token operator">=</span> <span class="token variable">$body</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"会员充值"</span><span class="token punctuation">;</span>
    <span class="token variable">$orderSn</span> <span class="token operator">=</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"mdHis"</span><span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token function">mt_rand</span><span class="token punctuation">(</span><span class="token number">2000</span><span class="token punctuation">,</span> <span class="token number">8000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$hostApi</span> <span class="token operator">=</span> <span class="token function">config</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'host_api'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token variable">$isSubscribe</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token comment">// 一次性支付</span>
        <span class="token variable">$bizSontent</span> <span class="token operator">=</span> <span class="token punctuation">[</span>
            <span class="token string double-quoted-string">"timeout_express"</span> <span class="token operator">=&gt;</span> <span class="token string double-quoted-string">"30m"</span><span class="token punctuation">,</span>
            <span class="token string double-quoted-string">"product_code"</span> <span class="token operator">=&gt;</span> <span class="token string double-quoted-string">"QUICK_MSECURITY_PAY"</span><span class="token punctuation">,</span>
            <span class="token string double-quoted-string">"total_amount"</span> <span class="token operator">=&gt;</span> <span class="token variable">$price</span><span class="token punctuation">,</span>
            <span class="token string double-quoted-string">"subject"</span> <span class="token operator">=&gt;</span> <span class="token variable">$detail</span><span class="token punctuation">,</span>
            <span class="token string double-quoted-string">"body"</span> <span class="token operator">=&gt;</span> <span class="token variable">$body</span><span class="token punctuation">,</span>
            <span class="token string double-quoted-string">"out_trade_no"</span> <span class="token operator">=&gt;</span> <span class="token variable">$orderSn</span><span class="token punctuation">,</span>
        <span class="token punctuation">]</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{<!-- --></span> <span class="token comment">// 订阅</span>
        <span class="token comment">// 参见下文sign_scene参数说明 https://opendocs.alipay.com/open/08bg92?pathHash=b655de17</span>
        <span class="token variable">$bizSontent</span> <span class="token operator">=</span> <span class="token punctuation">[</span>
            <span class="token string double-quoted-string">"out_trade_no"</span> <span class="token operator">=&gt;</span> <span class="token variable">$orderSn</span><span class="token punctuation">,</span>
            <span class="token string double-quoted-string">"total_amount"</span> <span class="token operator">=&gt;</span> <span class="token variable">$price</span><span class="token punctuation">,</span> <span class="token comment">//订单总金额,首次支付的金额,不算在周期扣总金额里。</span>
            <span class="token string double-quoted-string">"subject"</span> <span class="token operator">=&gt;</span> <span class="token variable">$detail</span><span class="token punctuation">,</span>
            <span class="token string double-quoted-string">"body"</span> <span class="token operator">=&gt;</span> <span class="token variable">$body</span><span class="token punctuation">,</span>
            <span class="token string double-quoted-string">"product_code"</span> <span class="token operator">=&gt;</span> <span class="token string double-quoted-string">"CYCLE_PAY_AUTH"</span><span class="token punctuation">,</span>  <span class="token comment">// CYCLE_PAY_AUTH</span>
            <span class="token string double-quoted-string">"timeout_express"</span> <span class="token operator">=&gt;</span> <span class="token string double-quoted-string">"90m"</span><span class="token punctuation">,</span>
            <span class="token comment">//商家扣款协议信息</span>
            <span class="token string double-quoted-string">"agreement_sign_params"</span> <span class="token operator">=&gt;</span> <span class="token punctuation">[</span>
                <span class="token string double-quoted-string">"product_code"</span> <span class="token operator">=&gt;</span> <span class="token string double-quoted-string">"GENERAL_WITHHOLDING"</span><span class="token punctuation">,</span><span class="token comment">//收单产品码固定为GENERAL_WITHHOLDING</span>
                <span class="token string double-quoted-string">"personal_product_code"</span> <span class="token operator">=&gt;</span> <span class="token string double-quoted-string">"CYCLE_PAY_AUTH_P"</span><span class="token punctuation">,</span> <span class="token comment">//个人签约产品码固定为CYCLE_PAY_AUTH_P</span>
                <span class="token string double-quoted-string">"sign_scene"</span> <span class="token operator">=&gt;</span> <span class="token string double-quoted-string">"INDUSTRY|DEFAULT_SCENE"</span><span class="token punctuation">,</span><span class="token comment">//协议签约场景,参见下文sign_scene参数说明 数字传媒行业</span>
                <span class="token string double-quoted-string">"external_agreement_no"</span> <span class="token operator">=&gt;</span> <span class="token variable">$orderSn</span><span class="token punctuation">,</span><span class="token comment">//商户签约号,代扣协议中用户的唯一签约号</span>

// “sign_notify_url” => KaTeX parse error: Expected 'EOF', got '&' at position 176: …ken operator">=&̲gt;</span> <spa…price,//单次扣款最大金额
// “total_amount” => “0.02”,//周期内扣允许扣款的总金额,单位为元
// “total_payments” => “2”//总扣款次数。
]
],
];
}

    <span class="token variable">$notiyUrl</span> <span class="token operator">=</span> <span class="token variable">$hostApi</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'/notify/alipay'</span><span class="token punctuation">;</span>
    <span class="token keyword">list</span><span class="token punctuation">(</span><span class="token variable">$result</span><span class="token punctuation">,</span> <span class="token variable">$responseNode</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token class-name static-context">PayUtil</span><span class="token operator">::</span><span class="token function">pay</span><span class="token punctuation">(</span><span class="token variable">$bizSontent</span><span class="token punctuation">,</span> <span class="token variable">$notiyUrl</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">dump</span><span class="token punctuation">(</span><span class="token variable">$result</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token punctuation">}</span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

异步回调

 // 支付宝异步通知
    function alipay()
    {
        $verify = PayUtil::notifyVerify($_POST);
        $orderSn = addslashes($_POST['out_trade_no'] ?? '');    //商户订单号
        $trade_no = addslashes($_POST['trade_no'] ?? '');       //支付宝交易号
        $trade_status = trim(addslashes($_POST['trade_status'] ?? ''));
    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$trade_status</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token comment">// 支付回调</span>
        <span class="token class-name static-context">LogHelperUtil</span><span class="token operator">::</span><span class="token function">outLog</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'alipay_notify_'</span> <span class="token operator">.</span> <span class="token variable">$trade_status</span><span class="token punctuation">,</span> <span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'post'</span> <span class="token operator">=&gt;</span> <span class="token variable">$_POST</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'verify'</span> <span class="token operator">=&gt;</span> <span class="token variable">$verify</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'alipay_notify'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$orderSn</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
            <span class="token keyword">return</span> <span class="token string double-quoted-string">"fail"</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        <span class="token class-name static-context">Db</span><span class="token operator">::</span><span class="token function">name</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'order_log_alipay'</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">insert</span><span class="token punctuation">(</span><span class="token punctuation">[</span>
            <span class="token string single-quoted-string">'order_sn'</span> <span class="token operator">=&gt;</span> <span class="token variable">$orderSn</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'trans_id'</span> <span class="token operator">=&gt;</span> <span class="token variable">$trade_no</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'create_time'</span> <span class="token operator">=&gt;</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Y-m-d H:i:s'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
            <span class="token string single-quoted-string">'content'</span> <span class="token operator">=&gt;</span> <span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token variable">$_POST</span><span class="token punctuation">)</span>
        <span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token variable">$orderInfo</span> <span class="token operator">=</span> <span class="token class-name static-context">OrderModel</span><span class="token operator">::</span><span class="token function">get_info</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'order_sn'</span> <span class="token operator">=&gt;</span> <span class="token variable">$orderSn</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'status'</span> <span class="token operator">=&gt;</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'pay_type'</span> <span class="token operator">=&gt;</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$orderInfo</span><span class="token punctuation">)</span> <span class="token operator">&amp;&amp;</span> <span class="token variable">$trade_status</span> <span class="token operator">==</span> <span class="token string single-quoted-string">'TRADE_SUCCESS'</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
            <span class="token variable">$this</span><span class="token operator">-&gt;</span><span class="token function">paySuccess</span><span class="token punctuation">(</span><span class="token variable">$orderInfo</span><span class="token punctuation">,</span> <span class="token variable">$trade_no</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token keyword">return</span> <span class="token string double-quoted-string">"success"</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$trade_status</span> <span class="token operator">==</span> <span class="token string single-quoted-string">'TRADE_CLOSED'</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token comment">// 退款</span>
            <span class="token keyword">return</span> <span class="token string double-quoted-string">"success"</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        <span class="token keyword">return</span> <span class="token string double-quoted-string">"fail"</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token comment">/***************************************************************
     * 订阅回调
     * 重要参数说明
     * status:协议状态,枚举支持。 NORMAL:正常  UNSIGN:解约。
     * external_agreement_no:标示用户的唯一签约协议号,商家自定义。仅签约接口传入时返回
     * agreement_no:支付宝系统中用以唯一标识用户签约记录的编号。
     * notify_type:异步通知类型,枚举支持。 dut_user_sign:当 status = NORMAL 表示签约成功。  dut_user_unsign:当 status = UNSIGN 表示解约成功。
     * sign_scene:签约协议场景。
     * personal_product_code:协议产品码。
     * alipay_user_id:用户的支付宝账号对应的支付宝唯一用户号。
     **********************************************************************/</span>
    <span class="token variable">$status</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'status'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>  <span class="token comment">// 协议状态,枚举支持。 NORMAL:正常  UNSIGN:解约。</span>
    <span class="token variable">$notifyType</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'notify_type'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>  <span class="token comment">// 异步通知类型,枚举支持。 dut_user_sign:当 status = NORMAL 表示签约成功。  dut_user_unsign:当 status = UNSIGN 表示解约成功。</span>
    <span class="token variable">$orderSn</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'external_agreement_no'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span> <span class="token comment">// 自定义</span>
    <span class="token variable">$agreementNo</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'agreement_no'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token class-name static-context">Db</span><span class="token operator">::</span><span class="token function">name</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'order_log_alipay_sub'</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">insert</span><span class="token punctuation">(</span><span class="token punctuation">[</span>
        <span class="token string single-quoted-string">'order_sn'</span> <span class="token operator">=&gt;</span> <span class="token variable">$orderSn</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'trans_id'</span> <span class="token operator">=&gt;</span> <span class="token variable">$agreementNo</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'create_time'</span> <span class="token operator">=&gt;</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Y-m-d H:i:s'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
        <span class="token string single-quoted-string">'content'</span> <span class="token operator">=&gt;</span> <span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token variable">$_POST</span><span class="token punctuation">)</span>
    <span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token class-name static-context">LogHelperUtil</span><span class="token operator">::</span><span class="token function">outLog</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'alipay_notify_sub_'</span> <span class="token operator">.</span> <span class="token variable">$status</span><span class="token punctuation">,</span> <span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'post'</span> <span class="token operator">=&gt;</span> <span class="token variable">$_POST</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'verify'</span> <span class="token operator">=&gt;</span> <span class="token variable">$verify</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'alipay_notify_sub'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$agreementNo</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        <span class="token keyword">return</span> <span class="token string double-quoted-string">"fail"</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token variable">$orderInfo</span> <span class="token operator">=</span> <span class="token class-name static-context">OrderSubscribeModel</span><span class="token operator">::</span><span class="token function">get_info</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'order_sn'</span> <span class="token operator">=&gt;</span> <span class="token variable">$orderSn</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'pay_type'</span> <span class="token operator">=&gt;</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$oid</span> <span class="token operator">=</span> <span class="token function">intval</span><span class="token punctuation">(</span><span class="token variable">$orderInfo</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'id'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token comment">//  订单ID</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$status</span> <span class="token operator">==</span> <span class="token string single-quoted-string">'UNSIGN'</span> <span class="token operator">&amp;&amp;</span> <span class="token variable">$notifyType</span> <span class="token operator">==</span> <span class="token string single-quoted-string">'dut_user_unsign'</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token comment">// 解约</span>
        <span class="token variable">$response</span> <span class="token operator">=</span> <span class="token class-name static-context">OrderSubscribeModel</span><span class="token operator">::</span><span class="token function">update_data</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'id'</span> <span class="token operator">=&gt;</span> <span class="token variable">$oid</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span>
            <span class="token string single-quoted-string">'status'</span> <span class="token operator">=&gt;</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token comment">// 0-签约中 1-已订阅 2-已退订</span>
            <span class="token string single-quoted-string">'contract_del_date'</span> <span class="token operator">=&gt;</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Y-m-d H:i:s'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">// 解约时间</span>
        <span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token keyword">return</span> <span class="token string double-quoted-string">"success"</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token comment">// 0-签约中 1-已订阅 2-已退订</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$orderInfo</span><span class="token punctuation">)</span> <span class="token operator">&amp;&amp;</span> <span class="token variable">$status</span> <span class="token operator">==</span> <span class="token string single-quoted-string">'NORMAL'</span> <span class="token operator">&amp;&amp;</span> <span class="token variable">$notifyType</span> <span class="token operator">==</span> <span class="token string single-quoted-string">'dut_user_sign'</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span> <span class="token comment">// 签约成功</span>
        <span class="token comment">// 记录签约成功的订单</span>
        <span class="token variable">$response</span> <span class="token operator">=</span> <span class="token class-name static-context">OrderSubscribeModel</span><span class="token operator">::</span><span class="token function">update_data</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'id'</span> <span class="token operator">=&gt;</span> <span class="token variable">$oid</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span>
            <span class="token string single-quoted-string">'status'</span> <span class="token operator">=&gt;</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token comment">// 0-签约中 1-已订阅 2-已退订</span>
            <span class="token string single-quoted-string">'agreement_no'</span> <span class="token operator">=&gt;</span> <span class="token variable">$agreementNo</span><span class="token punctuation">,</span>  <span class="token comment">// 签约号</span>
            <span class="token string single-quoted-string">'contract_date'</span> <span class="token operator">=&gt;</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Y-m-d H:i:s'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token comment">// 签约时间</span>
        <span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$response</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
            <span class="token variable">$toDay</span> <span class="token operator">=</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Y-m-d'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token variable">$kontDay</span> <span class="token operator">=</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Y-m-d'</span><span class="token punctuation">,</span> <span class="token function">strtotime</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"+1 day"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token variable">$nextPay</span> <span class="token operator">=</span> <span class="token variable">$orderInfo</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'next_pay'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
            <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$nextPay</span> <span class="token operator">==</span> <span class="token variable">$kontDay</span> <span class="token operator">||</span> <span class="token variable">$toDay</span> <span class="token operator">==</span> <span class="token variable">$nextPay</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
                <span class="token variable">$notiyUrl</span> <span class="token operator">=</span> <span class="token function">config</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'host_api'</span><span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'/notify/alipay_sub_knot?order_sn='</span> <span class="token operator">.</span> <span class="token variable">$orderSn</span><span class="token punctuation">;</span>
                <span class="token function">send_socket_time_task</span><span class="token punctuation">(</span><span class="token variable">$notiyUrl</span><span class="token punctuation">,</span> <span class="token number">300</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                <span class="token class-name static-context">LogHelperUtil</span><span class="token operator">::</span><span class="token function">outLog</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'alipay_notify_sub_'</span> <span class="token operator">.</span> <span class="token variable">$status</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"已加入队列"</span> <span class="token operator">.</span> <span class="token variable">$notiyUrl</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'alipay_notify_sub'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token punctuation">}</span>
        <span class="token punctuation">}</span>
        <span class="token keyword">return</span> <span class="token string double-quoted-string">"success"</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">return</span> <span class="token string double-quoted-string">"fail"</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85

周期扣款操作(定时任务)


    // 支付宝订阅自动扣款
    function alipay_sub_knot()
    {
        $orderSnSub = trim(addslashes($_GET['order_sn'] ?? ''));
        if (empty($orderSnSub)) {
            return 'fail-sn';
        }
        // 0-签约中 1-已订阅 2-已退订
        $orderInfo = OrderSubscribeModel::get_info(['order_sn' => $orderSnSub, 'status' => 1]);
        if (empty($orderInfo)) {
            return 'fail-order';
        }
        $type = $orderInfo['type'] ?? 0;   
        $uid = $orderInfo['uid'] ?? 0;
        $priceRenew = $orderInfo['price_renew'] ?? 0;  // 续订价格
        $agreementNo = $orderInfo['agreement_no'] ?? '';  // 签约号
        if (empty($agreementNo)) {
            return 'fail-order';
        }
        LogHelperUtil::outLog('alipay_sub_knot', json_encode(['orderSnSub' => $orderSnSub, 'order' => $orderInfo]), 'alipay_sub_knot');
    <span class="token variable">$detail</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'周期扣款'</span><span class="token punctuation">;</span>
    <span class="token variable">$orderSn</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"DYK<span class="token interpolation"><span class="token punctuation">{<!-- --></span><span class="token variable">$type</span><span class="token punctuation">}</span></span>U"</span> <span class="token operator">.</span> <span class="token variable">$uid</span> <span class="token operator">.</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"mdHis"</span><span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token function">mt_rand</span><span class="token punctuation">(</span><span class="token number">2000</span><span class="token punctuation">,</span> <span class="token number">8000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">list</span><span class="token punctuation">(</span><span class="token variable">$result</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token class-name static-context">PayUtil</span><span class="token operator">::</span><span class="token function">pay_sub_knot</span><span class="token punctuation">(</span><span class="token variable">$orderSn</span><span class="token punctuation">,</span> <span class="token variable">$detail</span><span class="token punctuation">,</span> <span class="token variable">$priceRenew</span><span class="token punctuation">,</span> <span class="token variable">$agreementNo</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$resultCode</span> <span class="token operator">=</span> <span class="token variable">$result</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'code'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token number">0</span><span class="token punctuation">;</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$resultCode</span> <span class="token operator">!=</span> <span class="token number">10000</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        <span class="token class-name static-context">LogHelperUtil</span><span class="token operator">::</span><span class="token function">outLog</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'alipay_sub_knot_fail'</span><span class="token punctuation">,</span> <span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'orderSnSub'</span> <span class="token operator">=&gt;</span> <span class="token variable">$orderSnSub</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'order'</span> <span class="token operator">=&gt;</span> <span class="token variable">$orderInfo</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'result'</span> <span class="token operator">=&gt;</span> <span class="token variable">$result</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'alipay_sub_knot'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token keyword">return</span> <span class="token string double-quoted-string">"fail-result"</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token comment">// 扣款成功,写入订单逻辑</span>
   
    <span class="token keyword">return</span> <span class="token string double-quoted-string">"success"</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

其他一下方法

    function alipay_test()
    {
    <span class="token variable">$agreementNo</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'20235529965404462663'</span><span class="token punctuation">;</span>
    <span class="token keyword">list</span><span class="token punctuation">(</span><span class="token variable">$res</span><span class="token punctuation">,</span><span class="token variable">$code</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token class-name static-context">PayUtil</span><span class="token operator">::</span><span class="token function">agreementQuery</span><span class="token punctuation">(</span><span class="token variable">$agreementNo</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 签约查询</span>
    <span class="token function">dump</span><span class="token punctuation">(</span><span class="token variable">$res</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">// 周期性扣款协议执行计划修改</span>
    <span class="token keyword">list</span><span class="token punctuation">(</span><span class="token variable">$res</span><span class="token punctuation">,</span><span class="token variable">$code</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token class-name static-context">PayUtil</span><span class="token operator">::</span><span class="token function">agreementModify</span><span class="token punctuation">(</span><span class="token variable">$agreementNo</span><span class="token punctuation">,</span><span class="token string single-quoted-string">'2023-11-01'</span><span class="token punctuation">,</span><span class="token string single-quoted-string">'购买了半年包月'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">dump</span><span class="token punctuation">(</span><span class="token variable">$res</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">// 解约</span>
    <span class="token keyword">list</span><span class="token punctuation">(</span><span class="token variable">$res</span><span class="token punctuation">,</span><span class="token variable">$code</span><span class="token punctuation">)</span> <span class="token operator">=</span> <span class="token class-name static-context">PayUtil</span><span class="token operator">::</span><span class="token function">agreementUnsign</span><span class="token punctuation">(</span><span class="token variable">$agreementNo</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">dump</span><span class="token punctuation">(</span><span class="token variable">$res</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

PayUtil 封装方法文件

<?php

namespace pay</span>alipay;

class PayUtil
{

<span class="token comment">/**
 * 发起支付
 * 支付后签约场景:https://opendocs.alipay.com/pre-open/08bpuc?pathHash=a572b7a7
 * @param $bizSontent
 * @param $notiyUrl
 * @return array|string[]
 * @author wzb
 * @date 2023/7/22 9:50
 */</span>

<span class="token keyword">static</span> <span class="token keyword">function</span> <span class="token function-definition function">pay</span><span class="token punctuation">(</span><span class="token variable">$bizSontent</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token variable">$notiyUrl</span> <span class="token operator">=</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
    <span class="token variable">$alipayConfig</span> <span class="token operator">=</span> <span class="token function">config</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'alipay_config'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 配置</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$bizSontent</span><span class="token punctuation">)</span> <span class="token operator">||</span> <span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$alipayConfig</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token string single-quoted-string">''</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token variable">$aop</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AopClient</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">gatewayUrl</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'https://openapi.alipay.com/gateway.do'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">appId</span> <span class="token operator">=</span> <span class="token variable">$alipayConfig</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'appid'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">rsaPrivateKey</span> <span class="token operator">=</span> <span class="token variable">$alipayConfig</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'rsaPrivateKey'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">alipayrsaPublicKey</span> <span class="token operator">=</span> <span class="token variable">$alipayConfig</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'alipayrsaPublicKey'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">apiVersion</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">signType</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'RSA2'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">postCharset</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">format</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'json'</span><span class="token punctuation">;</span>
    <span class="token variable">$request</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name class-name-fully-qualified"><span class="token punctuation">\</span>AlipayTradeAppPayRequest</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$request</span><span class="token operator">-&gt;</span><span class="token function">setNotifyUrl</span><span class="token punctuation">(</span><span class="token variable">$notiyUrl</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$request</span><span class="token operator">-&gt;</span><span class="token function">setBizContent</span><span class="token punctuation">(</span><span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token variable">$bizSontent</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token function">sdkExecute</span><span class="token punctuation">(</span><span class="token variable">$request</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$responseNode</span> <span class="token operator">=</span> <span class="token function">str_replace</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"."</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"_"</span><span class="token punctuation">,</span> <span class="token variable">$request</span><span class="token operator">-&gt;</span><span class="token function">getApiMethodName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token string double-quoted-string">"_response"</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token variable">$result</span><span class="token punctuation">,</span> <span class="token variable">$responseNode</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token comment">/**
 * 查询交易信息
 *
 * @param $outTradeNo
 * @return string[]|void
 * @author wzb
 * @date 2023/7/22 10:03
 */</span>
<span class="token keyword">static</span> <span class="token keyword">function</span> <span class="token function-definition function">queryOrder</span><span class="token punctuation">(</span><span class="token variable">$outTradeNo</span> <span class="token operator">=</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
    <span class="token variable">$bizSontent</span> <span class="token operator">=</span> <span class="token punctuation">[</span>
        <span class="token string double-quoted-string">"out_trade_no"</span> <span class="token operator">=&gt;</span> <span class="token variable">$outTradeNo</span><span class="token punctuation">,</span>

// “trade_no”=>“DJ4U2407211930124801”,
// “query_options”=>[
// “trade_settle_info”, // 交易结算信息
// ]
];
a l i p a y C o n f i g < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n f u n c t i o n " > c o n f i g < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ( < / s p a n > < s p a n c l a s s = " t o k e n s t r i n g s i n g l e − q u o t e d − s t r i n g " > ′ a l i p a y c o n f i g ′ < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ) < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ; < / s p a n > < s p a n c l a s s = " t o k e n c o m m e n t " > / / 配置 < / s p a n > < s p a n c l a s s = " t o k e n k e y w o r d " > i f < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ( < / s p a n > < s p a n c l a s s = " t o k e n k e y w o r d " > e m p t y < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ( < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > alipayConfig</span> <span class="token operator">=</span> <span class="token function">config</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'alipay_config'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 配置</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable"> alipayConfig</span><spanclass="tokenoperator">=</span><spanclass="tokenfunction">config</span><spanclass="tokenpunctuation">(</span><spanclass="tokenstringsinglequotedstring">alipayconfig</span><spanclass="tokenpunctuation">)</span><spanclass="tokenpunctuation">;</span><spanclass="tokencomment">//配置</span><spanclass="tokenkeyword">if</span><spanclass="tokenpunctuation">(</span><spanclass="tokenkeyword">empty</span><spanclass="tokenpunctuation">(</span><spanclass="tokenvariable">alipayConfig)) {
return [‘’, ‘’];
}
a o p < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n k e y w o r d " > n e w < / s p a n > < s p a n c l a s s = " t o k e n c l a s s − n a m e " > A o p C l i e n t < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ( < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ) < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ; < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > aop</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AopClient</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable"> aop</span><spanclass="tokenoperator">=</span><spanclass="tokenkeyword">new</span><spanclass="tokenclassname">AopClient</span><spanclass="tokenpunctuation">(</span><spanclass="tokenpunctuation">)</span><spanclass="tokenpunctuation">;</span><spanclass="tokenvariable">aop->gatewayUrl = ‘https://openapi.alipay.com/gateway.do’;
KaTeX parse error: Expected 'EOF', got '&' at position 41: …ken operator">-&̲gt;</span><span…alipayConfig[‘appid’] ?? ‘’;
KaTeX parse error: Expected 'EOF', got '&' at position 41: …ken operator">-&̲gt;</span><span…alipayConfig[‘rsaPrivateKey’] ?? ‘’;
KaTeX parse error: Expected 'EOF', got '&' at position 41: …ken operator">-&̲gt;</span><span…alipayConfig[‘alipayrsaPublicKey’] ?? ‘’;
KaTeX parse error: Expected 'EOF', got '&' at position 41: …ken operator">-&̲gt;</span><span…aop->signType = ‘RSA2’;
KaTeX parse error: Expected 'EOF', got '&' at position 41: …ken operator">-&̲gt;</span><span…aop->format = ‘json’;
KaTeX parse error: Undefined control sequence: \< at position 183: …n punctuation">\̲<̲/span>AlipayTra…request->setBizContent(json_encode( b i z S o n t e n t < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ) < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ) < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ; < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > bizSontent</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable"> bizSontent</span><spanclass="tokenpunctuation">)</span><spanclass="tokenpunctuation">)</span><spanclass="tokenpunctuation">;</span><spanclass="tokenvariable">result = KaTeX parse error: Expected 'EOF', got '&' at position 41: …ken operator">-&̲gt;</span><span…request);
r e s p o n s e N o d e < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n f u n c t i o n " > s t r r e p l a c e < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ( < / s p a n > < s p a n c l a s s = " t o k e n s t r i n g d o u b l e − q u o t e d − s t r i n g " > " . " < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > , < / s p a n > < s p a n c l a s s = " t o k e n s t r i n g d o u b l e − q u o t e d − s t r i n g " > " " < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > , < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > responseNode</span> <span class="token operator">=</span> <span class="token function">str_replace</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"."</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"_"</span><span class="token punctuation">,</span> <span class="token variable"> responseNode</span><spanclass="tokenoperator">=</span><spanclass="tokenfunction">strreplace</span><spanclass="tokenpunctuation">(</span><spanclass="tokenstringdoublequotedstring">"."</span><spanclass="tokenpunctuation">,</span><spanclass="tokenstringdoublequotedstring">""</span><spanclass="tokenpunctuation">,</span><spanclass="tokenvariable">request->getApiMethodName()) . “_response”;
r e s p o n s e < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > response</span> <span class="token operator">=</span> <span class="token variable"> response</span><spanclass="tokenoperator">=</span><spanclass="tokenvariable">result-> r e s p o n s e N o d e < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ; < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > responseNode</span><span class="token punctuation">;</span> <span class="token variable"> responseNode</span><spanclass="tokenpunctuation">;</span><spanclass="tokenvariable">response = json_decode(json_encode( r e s p o n s e < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ) < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > , < / s p a n > < s p a n c l a s s = " t o k e n c o n s t a n t b o o l e a n " > t r u e < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ) < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ; < / s p a n > < s p a n c l a s s = " t o k e n k e y w o r d " > r e t u r n < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > [ < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > response</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token variable"> response</span><spanclass="tokenpunctuation">)</span><spanclass="tokenpunctuation">,</span><spanclass="tokenconstantboolean">true</span><spanclass="tokenpunctuation">)</span><spanclass="tokenpunctuation">;</span><spanclass="tokenkeyword">return</span><spanclass="tokenpunctuation">[</span><spanclass="tokenvariable">response, $responseNode];
}

<span class="token comment">/**
 * @param string $orderSn 订单号
 * @param string $detail 说明
 * @param int $totalAmount 扣款金额
 * @param string $agreement_no 签约号
 * @return array|string[]
 * @author wzb
 * @date 2023/7/29 10:50
 */</span>
<span class="token keyword">static</span> <span class="token keyword">function</span> <span class="token function-definition function">pay_sub_knot</span><span class="token punctuation">(</span><span class="token variable">$orderSn</span><span class="token punctuation">,</span> <span class="token variable">$detail</span><span class="token punctuation">,</span> <span class="token variable">$totalAmount</span><span class="token punctuation">,</span> <span class="token variable">$agreement_no</span><span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
    <span class="token variable">$bizSontent</span> <span class="token operator">=</span> <span class="token punctuation">[</span>
        <span class="token string double-quoted-string">"out_trade_no"</span> <span class="token operator">=&gt;</span> <span class="token variable">$orderSn</span><span class="token punctuation">,</span>  <span class="token comment">//订单号</span>
        <span class="token string double-quoted-string">"total_amount"</span> <span class="token operator">=&gt;</span> <span class="token variable">$totalAmount</span><span class="token punctuation">,</span>
        <span class="token string double-quoted-string">"subject"</span> <span class="token operator">=&gt;</span> <span class="token variable">$detail</span><span class="token punctuation">,</span>
        <span class="token string double-quoted-string">"product_code"</span> <span class="token operator">=&gt;</span> <span class="token string double-quoted-string">"GENERAL_WITHHOLDING"</span><span class="token punctuation">,</span>
        <span class="token comment">// 代扣信息。</span>
        <span class="token string single-quoted-string">'agreement_params'</span> <span class="token operator">=&gt;</span> <span class="token punctuation">[</span>
            <span class="token string double-quoted-string">"agreement_no"</span> <span class="token operator">=&gt;</span> <span class="token variable">$agreement_no</span><span class="token punctuation">,</span>
        <span class="token punctuation">]</span><span class="token punctuation">,</span>
    <span class="token punctuation">]</span><span class="token punctuation">;</span>

    <span class="token variable">$alipayConfig</span> <span class="token operator">=</span> <span class="token function">config</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'alipay_config'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 配置</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$bizSontent</span><span class="token punctuation">)</span> <span class="token operator">||</span> <span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$alipayConfig</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token string single-quoted-string">''</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token variable">$aop</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AopClient</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">gatewayUrl</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'https://openapi.alipay.com/gateway.do'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">appId</span> <span class="token operator">=</span> <span class="token variable">$alipayConfig</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'appid'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">rsaPrivateKey</span> <span class="token operator">=</span> <span class="token variable">$alipayConfig</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'rsaPrivateKey'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">alipayrsaPublicKey</span> <span class="token operator">=</span> <span class="token variable">$alipayConfig</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'alipayrsaPublicKey'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">apiVersion</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">signType</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'RSA2'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">postCharset</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">format</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'json'</span><span class="token punctuation">;</span>
    <span class="token variable">$request</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name class-name-fully-qualified"><span class="token punctuation">\</span>AlipayTradePayRequest</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$request</span><span class="token operator">-&gt;</span><span class="token function">setBizContent</span><span class="token punctuation">(</span><span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token variable">$bizSontent</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token function">execute</span><span class="token punctuation">(</span><span class="token variable">$request</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$responseNode</span> <span class="token operator">=</span> <span class="token function">str_replace</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"."</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"_"</span><span class="token punctuation">,</span> <span class="token variable">$request</span><span class="token operator">-&gt;</span><span class="token function">getApiMethodName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token string double-quoted-string">"_response"</span><span class="token punctuation">;</span>
    <span class="token variable">$response</span> <span class="token operator">=</span> <span class="token variable">$result</span><span class="token operator">-&gt;</span><span class="token variable">$responseNode</span><span class="token punctuation">;</span>
    <span class="token variable">$response</span> <span class="token operator">=</span> <span class="token function">json_decode</span><span class="token punctuation">(</span><span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token variable">$response</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token variable">$response</span><span class="token punctuation">,</span> <span class="token variable">$responseNode</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token comment">/**
 * 退款
 * @param $outTradeNo
 * @param $tradeNo
 * @param $refundAmount
 * @return array
 * @author wzb
 * @date 2023/7/25 17:14
 */</span>
<span class="token keyword">static</span> <span class="token keyword">function</span> <span class="token function-definition function">refundOrder</span><span class="token punctuation">(</span><span class="token variable">$outTradeNo</span> <span class="token operator">=</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">,</span> <span class="token variable">$tradeNo</span> <span class="token operator">=</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">,</span> <span class="token variable">$refundAmount</span> <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
    <span class="token variable">$bizSontent</span> <span class="token operator">=</span> <span class="token punctuation">[</span>
        <span class="token string double-quoted-string">"out_trade_no"</span> <span class="token operator">=&gt;</span> <span class="token variable">$outTradeNo</span><span class="token punctuation">,</span>
        <span class="token string double-quoted-string">"trade_no"</span> <span class="token operator">=&gt;</span> <span class="token variable">$tradeNo</span><span class="token punctuation">,</span>
        <span class="token string double-quoted-string">"refund_amount"</span> <span class="token operator">=&gt;</span> <span class="token variable">$refundAmount</span><span class="token punctuation">,</span>
    <span class="token punctuation">]</span><span class="token punctuation">;</span>

    <span class="token variable">$alipayConfig</span> <span class="token operator">=</span> <span class="token function">config</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'alipay_config'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 配置</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$alipayConfig</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token string single-quoted-string">''</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token variable">$aop</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AopClient</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">gatewayUrl</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'https://openapi.alipay.com/gateway.do'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">appId</span> <span class="token operator">=</span> <span class="token variable">$alipayConfig</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'appid'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">rsaPrivateKey</span> <span class="token operator">=</span> <span class="token variable">$alipayConfig</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'rsaPrivateKey'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">alipayrsaPublicKey</span> <span class="token operator">=</span> <span class="token variable">$alipayConfig</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'alipayrsaPublicKey'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">apiVersion</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">signType</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'RSA2'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">postCharset</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">format</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'json'</span><span class="token punctuation">;</span>
    <span class="token variable">$request</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name class-name-fully-qualified"><span class="token punctuation">\</span>AlipayTradeRefundRequest</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$request</span><span class="token operator">-&gt;</span><span class="token function">setBizContent</span><span class="token punctuation">(</span><span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token variable">$bizSontent</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token function">execute</span><span class="token punctuation">(</span><span class="token variable">$request</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$responseNode</span> <span class="token operator">=</span> <span class="token function">str_replace</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"."</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"_"</span><span class="token punctuation">,</span> <span class="token variable">$request</span><span class="token operator">-&gt;</span><span class="token function">getApiMethodName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token string double-quoted-string">"_response"</span><span class="token punctuation">;</span>
    <span class="token variable">$response</span> <span class="token operator">=</span> <span class="token variable">$result</span><span class="token operator">-&gt;</span><span class="token variable">$responseNode</span><span class="token punctuation">;</span>
    <span class="token variable">$response</span> <span class="token operator">=</span> <span class="token function">json_decode</span><span class="token punctuation">(</span><span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token variable">$response</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token variable">$response</span><span class="token punctuation">,</span> <span class="token variable">$responseNode</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>


<span class="token comment">/**
 * 查询签约接口
 * https://opendocs.alipay.com/open/3dab71bc_alipay.user.agreement.query?scene=8837b4183390497f84bb53783b488ecc&amp;pathHash=9a0c5949
 * @return array|string[]
 * @author wzb
 * @date 2023/7/29 13:35
 */</span>
<span class="token keyword">static</span> <span class="token keyword">function</span> <span class="token function-definition function">agreementQuery</span><span class="token punctuation">(</span><span class="token variable">$agreementNo</span><span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
    <span class="token variable">$bizSontent</span> <span class="token operator">=</span> <span class="token punctuation">[</span>
        <span class="token string double-quoted-string">"agreement_no"</span> <span class="token operator">=&gt;</span> <span class="token variable">$agreementNo</span><span class="token punctuation">,</span>
    <span class="token punctuation">]</span><span class="token punctuation">;</span>

    <span class="token variable">$alipayConfig</span> <span class="token operator">=</span> <span class="token function">config</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'alipay_config'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 配置</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$alipayConfig</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token string single-quoted-string">''</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token variable">$aop</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AopClient</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">gatewayUrl</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'https://openapi.alipay.com/gateway.do'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">appId</span> <span class="token operator">=</span> <span class="token variable">$alipayConfig</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'appid'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">rsaPrivateKey</span> <span class="token operator">=</span> <span class="token variable">$alipayConfig</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'rsaPrivateKey'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">alipayrsaPublicKey</span> <span class="token operator">=</span> <span class="token variable">$alipayConfig</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'alipayrsaPublicKey'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">apiVersion</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">signType</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'RSA2'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">postCharset</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">format</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'json'</span><span class="token punctuation">;</span>
    <span class="token variable">$request</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name class-name-fully-qualified"><span class="token punctuation">\</span>AlipayUserAgreementQueryRequest</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$request</span><span class="token operator">-&gt;</span><span class="token function">setBizContent</span><span class="token punctuation">(</span><span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token variable">$bizSontent</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token function">execute</span><span class="token punctuation">(</span><span class="token variable">$request</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$responseNode</span> <span class="token operator">=</span> <span class="token function">str_replace</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"."</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"_"</span><span class="token punctuation">,</span> <span class="token variable">$request</span><span class="token operator">-&gt;</span><span class="token function">getApiMethodName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token string double-quoted-string">"_response"</span><span class="token punctuation">;</span>
    <span class="token variable">$response</span> <span class="token operator">=</span> <span class="token variable">$result</span><span class="token operator">-&gt;</span><span class="token variable">$responseNode</span><span class="token punctuation">;</span>
    <span class="token variable">$response</span> <span class="token operator">=</span> <span class="token function">json_decode</span><span class="token punctuation">(</span><span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token variable">$response</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token variable">$response</span><span class="token punctuation">,</span> <span class="token variable">$responseNode</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token comment">/**
 * 解约
 * https://opendocs.alipay.com/open/b841da1f_alipay.user.agreement.unsign?scene=90766afb41f74df6ae1676e89625ebac&amp;pathHash=a3599432
 * @param string $agreementNo 签约号(协议号)
 * @param string $orderSn 订单号 代扣协议中标示用户的唯一签约号(确保在商户系统中唯一)。
 * @return array|string[]
 * @author wzb
 * @date 2023/7/29 13:49
 */</span>
<span class="token keyword">static</span> <span class="token keyword">function</span> <span class="token function-definition function">agreementUnsign</span><span class="token punctuation">(</span><span class="token variable">$agreementNo</span><span class="token punctuation">,</span> <span class="token variable">$orderSn</span><span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
    <span class="token variable">$bizSontent</span> <span class="token operator">=</span> <span class="token punctuation">[</span>
        <span class="token string double-quoted-string">"agreement_no"</span> <span class="token operator">=&gt;</span> <span class="token variable">$agreementNo</span><span class="token punctuation">,</span>
        <span class="token string double-quoted-string">"external_agreement_no"</span> <span class="token operator">=&gt;</span> <span class="token variable">$orderSn</span><span class="token punctuation">,</span>
    <span class="token punctuation">]</span><span class="token punctuation">;</span>

    <span class="token variable">$alipayConfig</span> <span class="token operator">=</span> <span class="token function">config</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'alipay_config'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 配置</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$alipayConfig</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token string single-quoted-string">''</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token variable">$aop</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AopClient</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">gatewayUrl</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'https://openapi.alipay.com/gateway.do'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">appId</span> <span class="token operator">=</span> <span class="token variable">$alipayConfig</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'appid'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">rsaPrivateKey</span> <span class="token operator">=</span> <span class="token variable">$alipayConfig</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'rsaPrivateKey'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">alipayrsaPublicKey</span> <span class="token operator">=</span> <span class="token variable">$alipayConfig</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'alipayrsaPublicKey'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">apiVersion</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">signType</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'RSA2'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">postCharset</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">format</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'json'</span><span class="token punctuation">;</span>
    <span class="token variable">$request</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name class-name-fully-qualified"><span class="token punctuation">\</span>AlipayUserAgreementUnsignRequest</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$request</span><span class="token operator">-&gt;</span><span class="token function">setBizContent</span><span class="token punctuation">(</span><span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token variable">$bizSontent</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token function">execute</span><span class="token punctuation">(</span><span class="token variable">$request</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$responseNode</span> <span class="token operator">=</span> <span class="token function">str_replace</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"."</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"_"</span><span class="token punctuation">,</span> <span class="token variable">$request</span><span class="token operator">-&gt;</span><span class="token function">getApiMethodName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token string double-quoted-string">"_response"</span><span class="token punctuation">;</span>
    <span class="token variable">$response</span> <span class="token operator">=</span> <span class="token variable">$result</span><span class="token operator">-&gt;</span><span class="token variable">$responseNode</span><span class="token punctuation">;</span>
    <span class="token variable">$response</span> <span class="token operator">=</span> <span class="token function">json_decode</span><span class="token punctuation">(</span><span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token variable">$response</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token variable">$response</span><span class="token punctuation">,</span> <span class="token variable">$responseNode</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token comment">/**
 * 周期性扣款协议执行计划修改
 * https://opendocs.alipay.com/open/ed428330_alipay.user.agreement.executionplan.modify?pathHash=e019f106
 * @param string $agreementNo 签约号(协议号)
 * @param string $nextPay 商户下一次扣款时间 2023-01-01
 * @param string $memo 具体修改原因    64个字符
 * @return array|string[]
 * @author wzb
 * @date 2023/7/29 13:45
 */</span>
<span class="token keyword">static</span> <span class="token keyword">function</span> <span class="token function-definition function">agreementModify</span><span class="token punctuation">(</span><span class="token variable">$agreementNo</span><span class="token punctuation">,</span> <span class="token variable">$nextPay</span><span class="token punctuation">,</span> <span class="token variable">$memo</span><span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
    <span class="token variable">$bizSontent</span> <span class="token operator">=</span> <span class="token punctuation">[</span>
        <span class="token string double-quoted-string">"agreement_no"</span> <span class="token operator">=&gt;</span> <span class="token variable">$agreementNo</span><span class="token punctuation">,</span>
        <span class="token string double-quoted-string">"deduct_time"</span> <span class="token operator">=&gt;</span> <span class="token variable">$nextPay</span><span class="token punctuation">,</span>
        <span class="token string double-quoted-string">"memo"</span> <span class="token operator">=&gt;</span> <span class="token variable">$memo</span><span class="token punctuation">,</span>
    <span class="token punctuation">]</span><span class="token punctuation">;</span>

    <span class="token variable">$alipayConfig</span> <span class="token operator">=</span> <span class="token function">config</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'alipay_config'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 配置</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$alipayConfig</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token string single-quoted-string">''</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token variable">$aop</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AopClient</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">gatewayUrl</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'https://openapi.alipay.com/gateway.do'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">appId</span> <span class="token operator">=</span> <span class="token variable">$alipayConfig</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'appid'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">rsaPrivateKey</span> <span class="token operator">=</span> <span class="token variable">$alipayConfig</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'rsaPrivateKey'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">alipayrsaPublicKey</span> <span class="token operator">=</span> <span class="token variable">$alipayConfig</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'alipayrsaPublicKey'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">apiVersion</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'1.0'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">signType</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'RSA2'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">postCharset</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'utf-8'</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">format</span> <span class="token operator">=</span> <span class="token string single-quoted-string">'json'</span><span class="token punctuation">;</span>
    <span class="token variable">$request</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name class-name-fully-qualified"><span class="token punctuation">\</span>AlipayUserAgreementExecutionplanModifyRequest</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$request</span><span class="token operator">-&gt;</span><span class="token function">setBizContent</span><span class="token punctuation">(</span><span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token variable">$bizSontent</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token function">execute</span><span class="token punctuation">(</span><span class="token variable">$request</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$responseNode</span> <span class="token operator">=</span> <span class="token function">str_replace</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"."</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"_"</span><span class="token punctuation">,</span> <span class="token variable">$request</span><span class="token operator">-&gt;</span><span class="token function">getApiMethodName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">.</span> <span class="token string double-quoted-string">"_response"</span><span class="token punctuation">;</span>
    <span class="token variable">$response</span> <span class="token operator">=</span> <span class="token variable">$result</span><span class="token operator">-&gt;</span><span class="token variable">$responseNode</span><span class="token punctuation">;</span>
    <span class="token variable">$response</span> <span class="token operator">=</span> <span class="token function">json_decode</span><span class="token punctuation">(</span><span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token variable">$response</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token constant boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span> <span class="token punctuation">[</span><span class="token variable">$response</span><span class="token punctuation">,</span> <span class="token variable">$responseNode</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token comment">/**
 * 验证
 * @param $arr
 * @return bool|string[]|null
 * @author wzb
 * @date 2023/7/22 10:33
 */</span>
<span class="token keyword">static</span> <span class="token keyword">function</span> <span class="token function-definition function">notifyVerify</span><span class="token punctuation">(</span><span class="token variable">$arr</span><span class="token punctuation">)</span>
<span class="token punctuation">{<!-- --></span>
    <span class="token variable">$alipayConfig</span> <span class="token operator">=</span> <span class="token function">config</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'alipay_config'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 配置</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$alipayConfig</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        <span class="token keyword">return</span> <span class="token constant boolean">false</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token variable">$aop</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AopClient</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token property">alipayrsaPublicKey</span> <span class="token operator">=</span> <span class="token variable">$alipayConfig</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'alipayrsaPublicKey'</span><span class="token punctuation">]</span> <span class="token operator">??</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">;</span>
    <span class="token variable">$urlString</span> <span class="token operator">=</span> <span class="token function">urldecode</span><span class="token punctuation">(</span><span class="token function">http_build_query</span><span class="token punctuation">(</span><span class="token variable">$arr</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$data</span> <span class="token operator">=</span> <span class="token function">explode</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'&amp;'</span><span class="token punctuation">,</span> <span class="token variable">$urlString</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token variable">$params</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
    <span class="token keyword">foreach</span> <span class="token punctuation">(</span><span class="token variable">$data</span> <span class="token keyword">as</span> <span class="token variable">$param</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        <span class="token variable">$item</span> <span class="token operator">=</span> <span class="token function">explode</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'='</span><span class="token punctuation">,</span> <span class="token variable">$param</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">"2"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token variable">$params</span><span class="token punctuation">[</span><span class="token variable">$item</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$item</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token variable">$aop</span><span class="token operator">-&gt;</span><span class="token function">rsaCheckV1</span><span class="token punctuation">(</span><span class="token variable">$params</span><span class="token punctuation">,</span> <span class="token constant">null</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'RSA2'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">return</span> <span class="token variable">$result</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302

PHP服务端SDK

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值