Class PayApi


  • public class PayApi
    extends MchApi
    支付API
    Since:
    JDK 1.6
    Author:
    jinyu(foxinmy@gmail.com)
    • Method Detail

      • createPrePay

        public PrePay createPrePay​(MchPayPackage payPackage)
                            throws WeixinException
        统一下单接口
        除被扫支付场景以外,商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再按扫码、JSAPI 、APP等不同场景生成交易串调起支付。
        Parameters:
        payPackage - 包含订单信息的对象
        Returns:
        预支付对象
        Throws:
        WeixinException
        See Also:
        MchPayPackage, PrePay, 统一下单接口
      • createJSPayRequest

        public MchPayRequest createJSPayRequest​(String openId,
                                                String body,
                                                String outTradeNo,
                                                double totalFee,
                                                String notifyUrl,
                                                String createIp,
                                                String attach)
                                         throws WeixinException
        创建JSAPI支付请求对象
        Parameters:
        openId - 用户ID
        body - 订单描述
        outTradeNo - 订单号
        totalFee - 订单总额(元)
        notifyUrl - 支付通知地址
        createIp - ip地址
        attach - 附加数据 非必填
        Returns:
        JSAPI支付对象
        Throws:
        WeixinException
        See Also:
        JSAPIPayRequest
      • createNativePayRequest

        public String createNativePayRequest​(String productId)
        创建Native支付(扫码支付)链接【模式一】
        Parameters:
        productId - 与订单ID等价
        Returns:
        支付链接
        See Also:
        扫码支付 , 模式一
      • createNativePayResponse

        public NativePayResponse createNativePayResponse​(String productId,
                                                         String body,
                                                         String outTradeNo,
                                                         double totalFee,
                                                         String notifyUrl,
                                                         String createIp,
                                                         String attach)
                                                  throws WeixinException
        创建Native支付(扫码支付)回调对象【模式一】
        Parameters:
        productId - 商品ID
        body - 商品描述
        outTradeNo - 商户内部唯一订单号
        totalFee - 商品总额 单位元
        notifyUrl - 支付回调URL
        createIp - 订单生成的机器 IP
        attach - 附加数据 非必填
        Returns:
        Native回调对象
        Throws:
        WeixinException
        See Also:
        NativePayResponse, 扫码支付 , 模式一
      • createNativePayRequest

        public MchPayRequest createNativePayRequest​(String productId,
                                                    String body,
                                                    String outTradeNo,
                                                    double totalFee,
                                                    String notifyUrl,
                                                    String createIp,
                                                    String attach)
                                             throws WeixinException
        创建Native支付(扫码支付)链接【模式二】
        Parameters:
        productId - 商品ID
        body - 商品描述
        outTradeNo - 商户内部唯一订单号
        totalFee - 商品总额 单位元
        notifyUrl - 支付回调URL
        createIp - 订单生成的机器 IP
        attach - 附加数据 非必填
        Returns:
        Native支付对象
        Throws:
        WeixinException
        See Also:
        NATIVEPayRequest, 扫码支付 , 模式二
      • createWapPayRequest

        public MchPayRequest createWapPayRequest​(String body,
                                                 String outTradeNo,
                                                 double totalFee,
                                                 String notifyUrl,
                                                 String createIp,
                                                 String attach,
                                                 SceneInfoApp app)
                                          throws WeixinException
        创建WAP支付请求对象:正常流程用户支付完成后会返回至发起支付的页面,如需返回至指定页面, 则可以在MWEB_URL后拼接上redirect_url参数,来指定回调页面
        Parameters:
        body - 商品描述
        outTradeNo - 商户内部唯一订单号
        totalFee - 商品总额 单位元
        notifyUrl - 支付回调URL
        createIp - 订单生成的机器 IP
        attach - 附加数据 非必填
        app - 应用信息
        Returns:
        WAP支付对象
        Throws:
        WeixinException
        See Also:
        SceneInfoApp, WAPPayRequest, WAP支付
      • queryOrder

        public Order queryOrder​(IdQuery idQuery)
                         throws WeixinException
        订单查询

        当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
        调用支付接口后,返回系统错误或未知交易状态情况;
        调用被扫支付API,返回USERPAYING的状态;
        调用关单或撤销接口API之前,需确认支付状态;

        Parameters:
        idQuery - 商户系统内部的订单号, transaction_id、out_trade_no 二 选一,如果同时存在优先级: transaction_id> out_trade_no
        Returns:
        订单信息
        Throws:
        WeixinException
        Since:
        V3
        See Also:
        Order, 订单查询API
      • applyRefund

        public RefundResult applyRefund​(IdQuery idQuery,
                                        String outRefundNo,
                                        double totalFee,
                                        double refundFee,
                                        CurrencyType refundFeeType,
                                        String opUserId,
                                        String refundDesc,
                                        RefundAccountType refundAccountType)
                                 throws WeixinException
        申请退款(请求需要双向证书)

        当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,微信支付将在收到退款请求并且验证成功之后, 按照退款规则将支付款按原路退到买家帐号上。

        1. 交易时间超过一年的订单无法提交退款;
        2. 微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。 申请退款总金额不能超过订单金额。 一笔退款失败后重新提交,请不要更换退款单号,请使用原商户退款单号。
        3. 请求频率限制:150qps,即每秒钟正常的申请退款请求次数不超过150次。 错误或无效请求频率限制:6qps,即每秒钟异常或错误的退款申请请求不超过6次。
        4. 每个支付订单的部分退款次数不能超过50次。
        Parameters:
        idQuery - 商户系统内部的订单号, transaction_id 、 out_trade_no 二选一,如果同时存在优先级: transaction_id> out_trade_no
        outRefundNo - 商户系统内部的退款单号,商 户系统内部唯一,同一退款单号多次请求只退一笔
        totalFee - 订单总金额,单位为元
        refundFee - 退款总金额,单位为元,可以做部分退款
        refundFeeType - 货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY
        opUserId - 操作员帐号, 默认为商户号
        refundDesc - 退款原因,若商户传入,会在下发给用户的退款消息中体现退款原因
        refundAccountType - 退款资金来源,默认使用未结算资金退款:REFUND_SOURCE_UNSETTLED_FUNDS
        Returns:
        退款申请结果
        Throws:
        WeixinException
        Since:
        V3
        See Also:
        RefundResult, 申请退款API
      • reverseOrder

        public MerchantResult reverseOrder​(IdQuery idQuery)
                                    throws WeixinException
        冲正订单(需要证书)
        当支付返回失败,或收银系统超时需要取消交易,可以调用该接口
        接口逻辑:支 付失败的关单,支付成功的撤销支付
        7天以内的单可撤销,其他正常支付的单 如需实现相同功能请调用退款接口
        调用扣款接口后请勿立即调用撤销,需要等待5秒以上。先调用查单接口,如果没有确切的返回,再调用撤销
        Parameters:
        idQuery - 商户系统内部的订单号, transaction_id 、 out_trade_no 二选一,如果同时存在优先级: transaction_id> out_trade_no
        Returns:
        撤销结果
        Throws:
        WeixinException
        Since:
        V3
      • getShorturl

        public String getShorturl​(String url)
                           throws WeixinException
        native支付URL转短链接:用于扫码原生支付模式一中的二维码链接转成短链接(weixin://wxpay/s/XXXXXX),减小二维码数据量 ,提升扫描速度和精确度。
        Parameters:
        url - 具有native标识的支付URL
        Returns:
        转换后的短链接
        Throws:
        WeixinException
        See Also:
        转换短链接API
      • closeOrder

        public MerchantResult closeOrder​(String outTradeNo)
                                  throws WeixinException
        关闭订单

        商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付;系统下单后,用户支付超时,系统退出不再受理,避免用户继续 ,请调用关单接口,如果关单失败,返回已完 成支付请按正常支付处理。如果出现银行掉单,调用关单成功后,微信后台会主动发起退款。

        Parameters:
        outTradeNo - 商户系统内部的订单号
        Returns:
        处理结果
        Throws:
        WeixinException
        Since:
        V3
        See Also:
        关闭订单API
      • downloadBill

        public void downloadBill​(Date billDate,
                                 BillType billType,
                                 OutputStream outputStream,
                                 TarType tarType)
                          throws WeixinException
        下载对账单
        1.微信侧未成功下单的交易不会出现在对账单中。支付成功后撤销的交易会出现在对账 单中,跟原支付单订单号一致,bill_type 为 REVOKED;
        2.微信在次日 9 点启动生成前一天的对账单,建议商户 9 点半后再获取;
        3.对账单中涉及金额的字段单位为“元”。
        Parameters:
        billDate - 下载对账单的日期
        billType - 下载对账单的类型 ALL,返回当日所有订单信息, 默认值 SUCCESS,返回当日成功支付的订单 REFUND,返回当日退款订单
        outputStream - 输出流
        tarType - 非必传参数,固定值:GZIP,返回格式为.gzip的压缩包账单。不传则默认为数据流形式。
        Throws:
        WeixinException
        Since:
        V3
        See Also:
        下载对账单API
      • queryRefund

        public RefundRecord queryRefund​(IdQuery idQuery)
                                 throws WeixinException
        退款查询

        提交退款申请后,通过调用该接口查询退款状态。退款有一定延时,用零钱支付的退款20分钟内到账,银行卡支付的退款3个工作日后重新查询退款状态。

        Parameters:
        idQuery - 单号 refund_id、out_refund_no、 out_trade_no 、 transaction_id 四个参数必填一个,优先级为: refund_id>out_refund_no>transaction_id>out_trade_no
        Returns:
        退款记录
        Throws:
        WeixinException
        Since:
        V3
        See Also:
        RefundRecord, RefundDetail, 退款查询API
      • reportInterface

        public XmlResult reportInterface​(String interfaceUrl,
                                         int executeTime,
                                         String outTradeNo,
                                         String ip,
                                         Date time,
                                         XmlResult returnXml)
                                  throws WeixinException
        接口上报
        Parameters:
        interfaceUrl - 上报对应的接口的完整 URL, 类似: https://api.mch.weixin.q q.com/pay/unifiedorder
        executeTime - 接口耗时情况,单位为毫秒
        outTradeNo - 商户系统内部的订单号,商 户可以在上报时提供相关商户订单号方便微信支付更好 的提高服务质量。
        ip - 发起接口调用时的机器 IP
        time - 商户调用该接口时商户自己 系统的时间
        returnXml - 调用接口返回的基本数据
        Returns:
        处理结果
        Throws:
        WeixinException
        See Also:
        交易保障