Jelajahi Sumber

三方支付添加扫码支付

qin 11 bulan lalu
induk
melakukan
a66675eb48
24 mengubah file dengan 585 tambahan dan 19 penghapusan
  1. 13 1
      src/main/java/com/poteviohealth/ym/ipos/controller/feign/IposFeignController.java
  2. 31 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/PayBarcodeCancelOrder.java
  3. 58 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/PayBarcodeOrder.java
  4. 3 3
      src/main/java/com/poteviohealth/ym/ipos/model/payment/PayScanOrder.java
  5. 91 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/back/PayBarcodeBack.java
  6. 56 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/back/PayBarcodeCancelBack.java
  7. 42 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/back/PayScanBack.java
  8. 2 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/back/UpayReverseBack.java
  9. 19 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/AlipayResInfo.java
  10. 5 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/BalpayResInfo.java
  11. 2 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/DiscountGoodsDetail.java
  12. 5 6
      src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/EcnyResInfo.java
  13. 16 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/ExtendParams.java
  14. 2 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/FundBillList.java
  15. 21 9
      src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/GoodsDetail.java
  16. 30 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/PayBarcodeCancelRequest.java
  17. 48 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/PayBarcodeRequest.java
  18. 59 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/PayScanRequest.java
  19. 2 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/PromotionDetailDetail.java
  20. 19 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/UpayResInfo.java
  21. 2 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/VoucherDetailList.java
  22. 19 0
      src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/WxpayResInfo.java
  23. 8 0
      src/main/java/com/poteviohealth/ym/ipos/service/IPaymentService.java
  24. 32 0
      src/main/java/com/poteviohealth/ym/ipos/service/impl/PaymentServiceImpl.java

+ 13 - 1
src/main/java/com/poteviohealth/ym/ipos/controller/feign/IposFeignController.java

@@ -52,6 +52,11 @@ public class IposFeignController extends BaseFeignController {
     @RequestMapping(value = "/returnPay", method = RequestMethod.POST)
     @ResponseBody
     public VaultsResponse<PayInfoAppOutDTO> returnPay(@RequestBody PayBefor payBefor){
+        PaymentRecords pr = getPaymentRecords(payBefor);
+        return paymentService.unifiedOrder(pr);
+    }
+
+    private PaymentRecords getPaymentRecords(@RequestBody PayBefor payBefor) {
         PaymentRecords pr = new PaymentRecords();
         pr.setPayId(CgpTool.generateKey());
         pr.setPaySn(payBefor.getPaySn());
@@ -61,8 +66,15 @@ public class IposFeignController extends BaseFeignController {
         pr.setOperatorId(payBefor.getOperatorId());
         //pr.setPlanSplitDate(DateFormatUtils.format(DateUtils.caculDays(new Date(),17),"yyyyMMdd"));
         paymentRecordsService.save(pr);
+        return pr;
+    }
 
-        return paymentService.unifiedOrder(pr);
+    @ApiOperation(value = "第三方支付扫码信息")
+    @RequestMapping(value = "/returnScanPay", method = RequestMethod.POST)
+    @ResponseBody
+    public VaultsResponse<String> returnScanPay(@RequestBody PayBefor payBefor){
+        PaymentRecords pr = getPaymentRecords(payBefor);
+        return paymentService.scanPayOrder(pr);
     }
 
     @ApiOperation(value = "退款信息")

+ 31 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/PayBarcodeCancelOrder.java

@@ -0,0 +1,31 @@
+package com.poteviohealth.ym.ipos.model.payment;
+
+import com.poteviohealth.ym.ipos.model.base.Base;
+import com.poteviohealth.ym.ipos.model.payment.detail.PayBarcodeRequest;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ *  4.7.支付撤销交易
+ *  https://open.wangcaio2o.com/docs/ipos-sa/4.7.md
+ * @author Qin
+ */
+@Data
+public class PayBarcodeCancelOrder extends Base {
+
+    @ApiModelProperty(value = "请求类型,固定值:barcode_cancel_request",required = true)
+    private String request_type = "barcode_cancel_request";
+
+    @ApiModelProperty(value = "终端号,商户自定义终端号",required = true)
+    private String pos_id;
+
+    @ApiModelProperty(value = "门店号,商户自定义门店号",required = true)
+    private String store_id;
+
+    @ApiModelProperty(value = "操作员标识,操作员号")
+    private String user_id;
+
+
+    @ApiModelProperty(value = "条码支付")
+    private PayBarcodeRequest barcode_cancel_request;
+}

+ 58 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/PayBarcodeOrder.java

@@ -0,0 +1,58 @@
+package com.poteviohealth.ym.ipos.model.payment;
+
+import com.poteviohealth.ym.ipos.model.base.Base;
+import com.poteviohealth.ym.ipos.model.payment.detail.PayBarcodeRequest;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ *  4.2.条码支付交易
+ *  https://open.wangcaio2o.com/docs/ipos-sa/4.2.md
+ * @author Qin
+ */
+@Data
+public class PayBarcodeOrder extends Base {
+
+    @ApiModelProperty(value = "请求类型,固定值:barcode_pay_request",required = true)
+    private String request_type = "barcode_pay_request";
+
+    @ApiModelProperty(value = "终端号,商户自定义终端号",required = true)
+    private String pos_id;
+
+    @ApiModelProperty(value = "门店号,商户自定义门店号",required = true)
+    private String store_id;
+
+    @ApiModelProperty(value = "操作员标识,操作员号")
+    private String user_id;
+
+    @ApiModelProperty(value = "设备IP,发起交易的门店公网IP\n" +
+            "根据央行要求必须传门店真实公网IP\n" +
+            "否则商家会被风控!!!")
+    private String device_ip;
+
+    /**
+     * 发起交易的门店的经纬度信息
+     * 纬度格式:+表示北纬,-表示南纬;纬度整数位不超过2位,小数位不超过6位。
+     * 经纬度需同时传入
+     * 根据银联要求,银联二维码交易时,经纬度信息必填。
+     * 若为空将根据ip地址转换,不精确的情况可能会触发风控
+     */
+    @ApiModelProperty(value = "纬度")
+    private String latitude;
+
+    /**
+     * 发起交易的门店的经纬度信息
+     * 纬度格式:+表示北纬,-表示南纬;纬度整数位不超过2位,小数位不超过6位。
+     * 经纬度需同时传入
+     * 根据银联要求,银联二维码交易时,经纬度信息必填。
+     * 若为空将根据ip地址转换,不精确的情况可能会触发风控
+     */
+    @ApiModelProperty(value = "经度")
+    private String longitude;
+
+    @ApiModelProperty(value = "订单备注")
+    private String memo;
+
+    @ApiModelProperty(value = "条码支付")
+    private PayBarcodeRequest barcode_pay_request;
+}

+ 3 - 3
src/main/java/com/poteviohealth/ym/ipos/model/payment/ScanPayOrder.java → src/main/java/com/poteviohealth/ym/ipos/model/payment/PayScanOrder.java

@@ -1,7 +1,7 @@
 package com.poteviohealth.ym.ipos.model.payment;
 
 import com.poteviohealth.ym.ipos.model.base.Base;
-import com.poteviohealth.ym.ipos.model.payment.detail.PayDetail;
+import com.poteviohealth.ym.ipos.model.payment.detail.PayScanRequest;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -11,7 +11,7 @@ import lombok.Data;
  * @author Qin
  */
 @Data
-public class ScanPayOrder extends Base {
+public class PayScanOrder extends Base {
     @ApiModelProperty(value = "请求类型,固定值:scanpay_request",required = true)
     private String request_type = "scanpay_request";
 
@@ -33,6 +33,6 @@ public class ScanPayOrder extends Base {
     private String memo;
 
     @ApiModelProperty(value = "支付详情")
-    private PayDetail unifiedorder_request;
+    private PayScanRequest scanpay_request;
 
 }

+ 91 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/back/PayBarcodeBack.java

@@ -0,0 +1,91 @@
+package com.poteviohealth.ym.ipos.model.payment.back;
+
+import com.poteviohealth.ym.ipos.model.back.BaseBack;
+import com.poteviohealth.ym.ipos.model.payment.detail.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 条码支付返回值
+ * @author Qin
+ */
+@Data
+public class PayBarcodeBack extends BaseBack {
+    /**
+     * 调用wx.requestPayment(OBJECT)发起微信支付,Object参数取值说明:
+     *
+     * timeStamp 取【统一下单交易】返回的 time_stamp (当接口返回整型时,请先转为字符串后调用微信api)
+     *
+     * nonceStr 取【统一下单交易】返回的 nonce_str
+     *
+     * package 中 prepay_id 取【统一下单交易】返回的 pay_id,格式如:prepay_id=wx1712341601086258515448c31980502232
+     *
+     * paySign 取【统一下单交易】返回的pay_sign
+     *
+     * signType 取【统一下单交易】返回的sign_type
+     */
+    @ApiModelProperty(value = "终端号:商户自定义终端号",required = true)
+    private String pos_id;
+
+    @ApiModelProperty(value = "随机串号,随机生成串号,仅用于日志跟踪用,不保存",required = true)
+    private String sys_seq;
+
+    /**
+     * 502:支付宝
+     * 503:微信支付
+     * 512:银联二维码
+     * 516:数字人民币
+     * 519:会员余额支付
+     */
+    @ApiModelProperty(value = "支付类型",required = true)
+    private String pay_type;
+
+    /**
+     * 扩展信息字段内容为json格式
+     * 预留字段后续业务扩展使用
+     */
+    @ApiModelProperty(value = "扩展信息")
+    private String extend;
+
+    @ApiModelProperty(value = "商家优惠金额")
+    private String buss_discount_amt;
+
+    @ApiModelProperty(value = "平台优惠金额")
+    private String platform_discount_amt;
+
+    @ApiModelProperty(value = "支付宝折扣券")
+    private String discount_amt;
+
+    @ApiModelProperty(value = "商户优惠券")
+    private String mdiscount_amt;
+
+    @ApiModelProperty(value = "支付宝红包")
+    private String coupon_amt;
+
+    @ApiModelProperty(value = "商户店铺卡")
+    private String mcard_amt;
+
+    @ApiModelProperty(value = "商户红包")
+    private String mcoupon_amt;
+
+    @ApiModelProperty(value = "支付宝积分")
+    private String point_amt;
+
+    @ApiModelProperty(value = "订单备注")
+    private String memo;
+
+    @ApiModelProperty(value = "支付宝支付的时候")
+    private AlipayResInfo alipay_res_info;
+
+    @ApiModelProperty(value = "微信支付的时候")
+    private WxpayResInfo wxpay_res_info;
+
+    @ApiModelProperty(value = "银联二维码的时候")
+    private UpayResInfo upay_res_info;
+
+    @ApiModelProperty(value = "数字人民币的时候")
+    private EcnyResInfo ecny_res_info;
+
+    @ApiModelProperty(value = "会员余额支付的时候")
+    private BalpayResInfo balpay_res_info;
+}

+ 56 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/back/PayBarcodeCancelBack.java

@@ -0,0 +1,56 @@
+package com.poteviohealth.ym.ipos.model.payment.back;
+
+import com.poteviohealth.ym.ipos.model.back.BaseBack;
+import com.poteviohealth.ym.ipos.model.payment.detail.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 条码支付撤销返回值
+ * @author Qin
+ */
+@Data
+public class PayBarcodeCancelBack extends BaseBack {
+    @ApiModelProperty(value = "终端号:商户自定义终端号",required = true)
+    private String pos_id;
+
+    @ApiModelProperty(value = "随机串号,随机生成串号,仅用于日志跟踪用,不保存",required = true)
+    private String sys_seq;
+
+    /**
+     * 502:支付宝
+     * 503:微信支付
+     * 512:银联二维码
+     * 515:微信小程序
+     * 516:数字人民币
+     * 519:会员余额支付
+     * 521:聚分期
+     */
+    @ApiModelProperty(value = "支付类型",required = true)
+    private String pay_type;
+
+    /**
+     * 扩展信息字段内容为json格式
+     * 预留字段后续业务扩展使用
+     */
+    @ApiModelProperty(value = "扩展信息")
+    private String extend;
+
+    @ApiModelProperty(value = "支付宝支付的时候")
+    private AlipayResInfo alipay_res_info;
+
+    @ApiModelProperty(value = "微信支付的时候")
+    private WxpayResInfo wxpay_res_info;
+
+    @ApiModelProperty(value = "微信小程序支付的时候")
+    private WxpayResInfo wxapp_res_info;
+
+    @ApiModelProperty(value = "银联二维码的时候")
+    private UpayResInfo upay_res_info;
+
+    @ApiModelProperty(value = "聚分期的时候")
+    private EcnyResInfo jfqpay_res_info;
+
+    @ApiModelProperty(value = "会员余额支付的时候")
+    private BalpayResInfo balpay_res_info;
+}

+ 42 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/back/PayScanBack.java

@@ -0,0 +1,42 @@
+package com.poteviohealth.ym.ipos.model.payment.back;
+
+import com.poteviohealth.ym.ipos.model.back.BaseBack;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 扫码支付返回值
+ * @author Qin
+ */
+@Data
+public class PayScanBack extends BaseBack {
+    @ApiModelProperty(value = "终端号:商户自定义终端号",required = true)
+    private String pos_id;
+
+    @ApiModelProperty(value = "随机串号,随机生成串号,仅用于日志跟踪用,不保存",required = true)
+    private String sys_seq;
+
+    /**
+     * 502:支付宝
+     * 503:微信支付
+     * 512:银联二维码
+     * 516:数字人民币
+     * 519:会员余额支付
+     */
+    @ApiModelProperty(value = "支付类型",required = true)
+    private String pay_type;
+
+    /**
+     * 支付平台返回的扫码支付二维码信息
+     * 使用CDATA标签包裹
+     */
+    @ApiModelProperty(value = "支付二维码信息")
+    private String code_url;
+
+    /**
+     * 扩展信息字段内容为json格式
+     * 预留字段后续业务扩展使用
+     */
+    @ApiModelProperty(value = "扩展信息")
+    private String extend;
+}

+ 2 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/back/UpayReverseBack.java

@@ -1,11 +1,13 @@
 package com.poteviohealth.ym.ipos.model.payment.back;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 /**
  * 银联二维码退款返回
  * @author Qin
  */
+@Data
 public class UpayReverseBack {
 
     @ApiModelProperty(value = "银联订单号")

+ 19 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/AlipayResInfo.java

@@ -1,6 +1,7 @@
 package com.poteviohealth.ym.ipos.model.payment.detail;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.util.List;
 
@@ -8,6 +9,7 @@ import java.util.List;
  * 支付宝支付返回
  * @author Qin
  */
+@Data
 public class AlipayResInfo {
 
     @ApiModelProperty(value = "支付宝订单号")
@@ -16,6 +18,20 @@ public class AlipayResInfo {
     @ApiModelProperty(value = "支付商户订单号")
     private String out_trade_no;
 
+    /**
+     * 支付宝/微信/银联订单号
+     * 客户手机支付凭证上的订单号
+     */
+    @ApiModelProperty(value = "ATU订单号")
+    private String atu_trade_no;
+
+    /**
+     * 支付宝/微信/银联商户订单号
+     * 客户手机支付凭证上的商户订单号
+     */
+    @ApiModelProperty(value = "ATU商户订单号")
+    private String atu_out_trade_no;
+
     @ApiModelProperty(value = "买家支付宝用户号")
     private String buy_user_id;
 
@@ -34,6 +50,9 @@ public class AlipayResInfo {
     @ApiModelProperty(value = "买家付款的金额")
     private String buyer_pay_amount;
 
+    @ApiModelProperty(value = "交易手续费")
+    private String charge_amount;
+
     @ApiModelProperty(value = "支付金额/渠道")
     private List<FundBillList> fund_bill_list;
 

+ 5 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/BalpayResInfo.java

@@ -1,11 +1,13 @@
 package com.poteviohealth.ym.ipos.model.payment.detail;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 /**
  * 会员余额支付返回
  * @author Qin
  */
+@Data
 public class BalpayResInfo {
 
     @ApiModelProperty(value = "平台订单号")
@@ -22,4 +24,7 @@ public class BalpayResInfo {
 
     @ApiModelProperty(value = "交易时间")
     private String gmt_payment;
+
+    @ApiModelProperty(value = "交易手续费")
+    private String charge_amount;
 }

+ 2 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/DiscountGoodsDetail.java

@@ -1,11 +1,13 @@
 package com.poteviohealth.ym.ipos.model.payment.detail;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 /**
  * 单品信息
  * @author Qin
  */
+@Data
 public class DiscountGoodsDetail {
 
     @ApiModelProperty(value = "商品的编号")

+ 5 - 6
src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/EcnyResInfo.java

@@ -1,11 +1,13 @@
 package com.poteviohealth.ym.ipos.model.payment.detail;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 /**
  * 数字人民币支付返回
  * @author Qin
  */
+@Data
 public class EcnyResInfo {
 
     @ApiModelProperty(value = "平台订单号")
@@ -23,15 +25,12 @@ public class EcnyResInfo {
     @ApiModelProperty(value = "实付金额")
     private String receipt_fee;
 
+    @ApiModelProperty(value = "交易手续费")
+    private String charge_amount;
+
     @ApiModelProperty(value = "交易时间")
     private String gmt_payment;
 
-    /**
-     * 01:订单创建,02:用户支付中,03:已关闭,04:部分退款,05:全部退款,06:交易成功
-     */
-    @ApiModelProperty(value = "原始订单的状态")
-    private String order_status;
-
     @ApiModelProperty(value = "通道原始应答码,直连通道交易成功时候")
     private String detail_error_code;
 

+ 16 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/ExtendParams.java

@@ -11,6 +11,22 @@ import lombok.Data;
 @Data
 public class ExtendParams {
 
+    /**
+     * 花呗分期数,仅支持传入3、6、12,其他期数暂不支持
+     * 仅支付宝时生效
+     * hb_fq_num与hb_fq_seller_percent必须同时传入且使用花呗分期商品明细必传
+     */
+    @ApiModelProperty(value = "花呗分期数,仅支付宝时生效")
+    private String hb_fq_num;
+
+    /**
+     * 花呗卖家承担收费比例,商家承担手续费传入100,用户承担手续费传入0,仅支持传入100、0两种,其他比例暂不支持
+     * 仅支付宝时生效
+     * hb_fq_num与hb_fq_seller_percent必须同时传入且使用花呗分期商品明细必传
+     */
+    @ApiModelProperty(value = "花呗卖家承担收费比例,仅支付宝时生效")
+    private String hb_fq_seller_percent;
+
     /**
      * 分账标识
      * N:不分账

+ 2 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/FundBillList.java

@@ -1,11 +1,13 @@
 package com.poteviohealth.ym.ipos.model.payment.detail;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 /**
  * 支付金额/渠道
  * @author Qin
  */
+@Data
 public class FundBillList {
 
     @ApiModelProperty(value = "支付金额")

+ 21 - 9
src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/GoodsDetail.java

@@ -13,19 +13,31 @@ public class GoodsDetail {
     @ApiModelProperty(value = "商品的编号,范例:apple-01",required = true)
     private String goods_id;
 
-    @ApiModelProperty(value = "商品备注")
-    private String goods_remark;
+    @ApiModelProperty(value = "支付平台商品编号")
+    private String payment_goods_id;
 
-    @ApiModelProperty(value = "商品优惠金额,单位为分",required = true)
-    private String discount_amount;
+    @ApiModelProperty(value = "商品名称")
+    private String goods_name;
 
-    @ApiModelProperty(value = "商品数量",required = true)
+    @ApiModelProperty(value = "商品数量")
     private Integer quantity;
 
-    /**
-     * 如果商户有优惠,需传输商户优惠后的单价(例如:用户对一笔100元的订单使用了商场发的纸质优惠券100-50,则活动商品的单价应为原单价-50)
-     */
-    @ApiModelProperty(value = "商品单价,单位为分",required = true)
+    @ApiModelProperty(value = "商品单价,单位为分")
     private Long price;
 
+    @ApiModelProperty(value = "商品类目,仅支付宝、银联二维码时生效")
+    private String goods_category;
+
+    @ApiModelProperty(value = "商品描述信息,仅支付宝时生效")
+    private String body;
+
+    @ApiModelProperty(value = "商品的展示地址,仅支付宝时生效")
+    private String show_url;
+
+    @ApiModelProperty(value = "附加信息,仅银联二维码时生效")
+    private String addn_info;
+
+    @ApiModelProperty(value = "商品优惠金额,单位为分")
+    private String discount_amount;
+
 }

+ 30 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/PayBarcodeCancelRequest.java

@@ -0,0 +1,30 @@
+package com.poteviohealth.ym.ipos.model.payment.detail;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 条码支付撤销信息
+ * @author Qin
+ */
+@Data
+public class PayBarcodeCancelRequest {
+
+    /**
+     * 502:支付宝
+     * 503:微信支付
+     * 512:银联二维码
+     * 515:微信小程序
+     * 516:数字人民币
+     * 519:会员余额支付
+     * 521:聚分期
+     */
+    @ApiModelProperty(value = "支付类型")
+    private String pay_type;
+
+    /**
+     * 被撤销的支付请求流水号,且大于12位
+     */
+    @ApiModelProperty(value = "支付请求流水号")
+    private String org_pos_seq;
+}

+ 48 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/PayBarcodeRequest.java

@@ -0,0 +1,48 @@
+package com.poteviohealth.ym.ipos.model.payment.detail;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 条码支付信息
+ * @author Qin
+ */
+@Data
+public class PayBarcodeRequest {
+
+    @ApiModelProperty(value = "条码支付动态码")
+    private String barcode_info;
+
+    /**
+     * 502:支付宝
+     * 503:微信支付
+     * 512:银联二维码
+     * 516:数字人民币
+     * 519:会员余额支付
+     * 传空则根据付款码规则自动识别类型
+     */
+    @ApiModelProperty(value = "支付类型")
+    private String pay_type;
+
+    /**
+     * 支付金额,单位为分,不支持小数点
+     */
+    @ApiModelProperty(value = "交易金额")
+    private Long tx_amt;
+
+    /**
+     * 0:不使用优惠
+     * 1:可使用优惠
+     * 传空默认为1
+     * 具体应用:
+     * a.微信可使用优惠时,翼码传送已配置的订单优惠标记(goods_tag)给微信
+     * b.支付宝不可使用优惠时,翼码将不参与优惠计算的金额(undiscountable_amount)取订单金额传送给支付宝
+     */
+    @ApiModelProperty(value = "是否使用优惠券")
+    private String use_coupon;
+
+    @ApiModelProperty(value = "商品信息")
+    private List<GoodsDetail> goods_detail;
+}

+ 59 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/PayScanRequest.java

@@ -0,0 +1,59 @@
+package com.poteviohealth.ym.ipos.model.payment.detail;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 扫码支付信息
+ * @author Qin
+ */
+@Data
+public class PayScanRequest {
+
+    /**
+     * 502:支付宝
+     * 503:微信支付
+     * 512:银联二维码
+     * 521:聚分期
+     */
+    @ApiModelProperty(value = "支付类型")
+    private String pay_type = "503";
+
+    /**
+     * 支付金额,单位为分,不支持小数点
+     */
+    @ApiModelProperty(value = "交易金额")
+    private Long tx_amt;
+
+    /**
+     * 01:直接支付(说明:用户扫码后无需确认支付信息,直接拉起微信收银台进行支付)
+     * 02:确认支付(说明:用户扫码后会先打开支付确认页,用户点击支付确认页面中的支付按钮,在拉起微信收银台完成支付)
+     * 说明:此支付流程仅对微信支付有效,其它支付方式无效。
+     * 不传此节点系统默认按02:确认支付进行处理。
+     */
+    @ApiModelProperty(value = "支付流程")
+    private String payment_process;
+
+    /**
+     * 当支付方式为聚分期(pay_type=521)时生效
+     * 需指定聚分期分期银行时,则将银行编码传入该值
+     * 仅支持指定单一银行,银行编码详见下表
+     */
+    @ApiModelProperty(value = "指定银行编码")
+    private String bank_code;
+
+    /**
+     * 异步通知文档见4.20
+     * 使用XML格式报文时,建议使用CDATA标签包裹内容
+     */
+    @ApiModelProperty(value = "异步通知地址")
+    private String notify_url;
+
+    @ApiModelProperty(value = "商品信息")
+    private List<GoodsDetail> goods_detail;
+
+    @ApiModelProperty(value = "扩展参数")
+    private ExtendParams extend_params;
+}

+ 2 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/PromotionDetailDetail.java

@@ -1,6 +1,7 @@
 package com.poteviohealth.ym.ipos.model.payment.detail;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.util.List;
 
@@ -8,6 +9,7 @@ import java.util.List;
  * 优惠活动信息
  * @author Qin
  */
+@Data
 public class PromotionDetailDetail {
 
     @ApiModelProperty(value = "券或者立减优惠id")

+ 19 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/UpayResInfo.java

@@ -1,11 +1,13 @@
 package com.poteviohealth.ym.ipos.model.payment.detail;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 /**
  * 银联二维码支付返回
  * @author Qin
  */
+@Data
 public class UpayResInfo {
 
     @ApiModelProperty(value = "银联订单号")
@@ -14,6 +16,20 @@ public class UpayResInfo {
     @ApiModelProperty(value = "支付商户订单号")
     private String out_trade_no;
 
+    /**
+     * 支付宝/微信/银联订单号
+     * 客户手机支付凭证上的订单号
+     */
+    @ApiModelProperty(value = "ATU订单号")
+    private String atu_trade_no;
+
+    /**
+     * 支付宝/微信/银联商户订单号
+     * 客户手机支付凭证上的商户订单号
+     */
+    @ApiModelProperty(value = "ATU商户订单号")
+    private String atu_out_trade_no;
+
     /**
      * 标准银联/合利宝/星POS通道,交易成功时候,必填
      */
@@ -22,4 +38,7 @@ public class UpayResInfo {
 
     @ApiModelProperty(value = "买家实付金额")
     private String buyer_pay_amount;
+
+    @ApiModelProperty(value = "交易手续费")
+    private String charge_amount;
 }

+ 2 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/VoucherDetailList.java

@@ -1,6 +1,7 @@
 package com.poteviohealth.ym.ipos.model.payment.detail;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.util.List;
 
@@ -8,6 +9,7 @@ import java.util.List;
  * 优惠券信息
  * @author Qin
  */
+@Data
 public class VoucherDetailList {
 
     @ApiModelProperty(value = "券id")

+ 19 - 0
src/main/java/com/poteviohealth/ym/ipos/model/payment/detail/WxpayResInfo.java

@@ -1,11 +1,13 @@
 package com.poteviohealth.ym.ipos.model.payment.detail;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 /**
  * 微信支付返回
  * @author Qin
  */
+@Data
 public class WxpayResInfo {
 
     @ApiModelProperty(value = "微信订单号")
@@ -14,6 +16,20 @@ public class WxpayResInfo {
     @ApiModelProperty(value = "支付商户订单号")
     private String out_trade_no;
 
+    /**
+     * 支付宝/微信/银联订单号
+     * 客户手机支付凭证上的订单号
+     */
+    @ApiModelProperty(value = "ATU订单号")
+    private String atu_trade_no;
+
+    /**
+     * 支付宝/微信/银联商户订单号
+     * 客户手机支付凭证上的商户订单号
+     */
+    @ApiModelProperty(value = "ATU商户订单号")
+    private String atu_out_trade_no;
+
     @ApiModelProperty(value = "服务商公众号ID")
     private String app_id;
 
@@ -52,6 +68,9 @@ public class WxpayResInfo {
     @ApiModelProperty(value = "代金券金额")
     private String coupon_fee;
 
+    @ApiModelProperty(value = "交易手续费")
+    private String charge_amount;
+
     @ApiModelProperty(value = "支付完成时间")
     private String gmt_payment;
 

+ 8 - 0
src/main/java/com/poteviohealth/ym/ipos/service/IPaymentService.java

@@ -66,4 +66,12 @@ public interface IPaymentService {
      */
      String payNotification(PayNotification payNotification);
 
+
+    /**
+     * 扫码下单交易
+     * @param records
+     * @return
+     */
+    VaultsResponse<String> scanPayOrder(PaymentRecords records);
+
 }

+ 32 - 0
src/main/java/com/poteviohealth/ym/ipos/service/impl/PaymentServiceImpl.java

@@ -280,4 +280,36 @@ public class PaymentServiceImpl implements IPaymentService {
         }
             return "success";
     }
+
+    @Override
+    public VaultsResponse<String> scanPayOrder(PaymentRecords records) {
+        BasicConfiguration basicConfig = Basic.getSystemParameter(records.getOperatorId());
+        PayScanOrder payScanOrder = new PayScanOrder();
+        payScanOrder.setPos_seq(records.getPayId().toString());
+        payScanOrder.setPos_id(basicConfig.getCode());
+        payScanOrder.setStore_id(records.getOperatorId().toString());
+        payScanOrder.setDevice_ip(ip);
+        payScanOrder.setSystem_id(basicConfig.getSystemId());
+        payScanOrder.setIsspid(basicConfig.getPid());
+        PayScanRequest payScanRequest = new PayScanRequest();
+        payScanRequest.setTx_amt(records.getTxAmt());
+        payScanRequest.setNotify_url(url+"/payNotify");
+        ExtendParams extendParams = new ExtendParams();
+        extendParams.setPlan_split_date(records.getPlanSplitDate());
+        payScanRequest.setExtend_params(extendParams);
+        payScanOrder.setScanpay_request(payScanRequest);
+        PayScanBack back = null;
+        try {
+            back = (PayScanBack) YmUtil.resultBack(payScanOrder,new PayScanBack());
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+            return VaultsResponse.failed(e.getMessage());
+        }
+
+        if(YmUtil.FAIL.equals(back.getResult().getId())){
+            return VaultsResponse.success(back.getCode_url());
+        }
+
+        return VaultsResponse.failed(back.getResult().getComment());
+    }
 }