3 企业付款(Transfers)Demo

1 企业转账Demo

1.1 pingpp–java
在下载的ping++ sdk中找到TransferExample复制到你的项目中
1.2 运行前将你的ip配置到白名单

在这里插入图片描述

1.3 替换参数(以银联转账为例)
/* *
 * Ping++ Server SDK
 * 说明:
 * 以下代码只是为了方便商户测试而提供的样例代码,商户可根据自己网站需求按照技术文档编写, 并非一定要使用该代码。
 * 接入企业付款流程参考开发者中心:https://www.pingxx.com/docs/server/transfer ,文档可筛选后端语言和接入渠道。
 * 该代码仅供学习和研究 Ping++ SDK 使用,仅供参考。
*/
package com.omlife.pay.common;

import com.pingplusplus.Pingpp;
import com.pingplusplus.exception.*;
import com.pingplusplus.model.Transfer;
import com.pingplusplus.model.TransferCollection;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * 该实例演示如何使用 Ping++ 进行企业转账。
 *
 * 开发者需要填写 apiKey ,openid 和 appId ,
 *
 * apiKey 有 TestKey 和 LiveKey 两种。
 *
 * TestKey 模式下不会产生真实的交易。
 *
 * openid 是发送红包的对象在公共平台下的 openid ,获得 openid 的方法可以参考微信文档:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
 *
 */
public class TransferExample {

    public static void main(String[] args) throws Exception {
        runDemos("你的appId");   // 运行这个即可
    }




    private String appId;

    /**
     * 接收者的 openid
     */
    public static String openid = "USER_OPENID"; // 用户在商户微信公众号下的唯一标识,获取方式可参考 WxPubOAuthExample.java

    public static void runDemos(String appId) {
        // ping++ appId
        Pingpp.appId = "你的appId";
        // Secret Key
        Pingpp.apiKey = "你的"Secret Key;
        // 你的私钥位置
        Pingpp.privateKeyPath = "D:\\Project\\service\\src\\main\\resources\\keys\\rsa_private_key.pem";

        TransferExample transferExample = new TransferExample(appId);
        System.out.println("------- 创建 Transfer -------");
        Transfer transfer = transferExample.create1();
        System.out.println("------- 查询 Transfer -------");
        transferExample.retrieve(transfer.getId());
        System.out.println("------- 查询 Transfer 列表 -------");
        transferExample.list();

    }

    TransferExample(String appId) {
        this.appId = appId;
    }



    Transfer  create1(){
        Map<String, Object> transferMap = new HashMap<String, Object>();
        // 银联电子代付
        transferMap.put("channel", "unionpay");
        transferMap.put("order_no", "123456779");
        //订单总金额, 人民币单位:分(如订单总金额为 1 元,此处请填 100)
        transferMap.put("amount", 100);
        transferMap.put("type", "b2c");
        transferMap.put("currency", "cny");
        transferMap.put("description", "Your Description");
        Map<String, String> app = new HashMap<String, String>();
        app.put("id", "app_94e9e9KinHGSDuf1");
        transferMap.put("app", app);
        Map<String, Object> extra = new HashMap<String, Object>();
        extra.put("card_number", "6225220317083517");
        extra.put("user_name", "User Name");
        extra.put("open_bank_code", "0102");
        transferMap.put("extra", extra);
        Transfer transfer = null;
        try {
            transfer = Transfer.create(transferMap);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return transfer;
    }

    /**
     * 创建企业转账
     *
     * 创建企业转账需要传递一个 map 给 Transfer.create();
     * map 填写的具体介绍可以参考:https://www.pingxx.com/api#api-t-new
     *
     * @return
     */
    public Transfer create() {
        Transfer transfer = null;
        String channel = "alipay";

        String orderNo = new SimpleDateFormat("yyyyMMddhhmmss").format(new Date());
        Map<String, Object> transferMap = new HashMap<String, Object>();
        transferMap.put("channel", channel); // 目前支持 支付宝:alipay,银联:unionpay,微信公众号:wx_pub,通联:allinpay,京东:jdpay

        // 付款使用的商户内部订单号。
        // wx_pub 规定为 1 ~ 50 位不能重复的数字字母组合;
        // alipay 为 1 ~ 64 位不能重复的数字字母组合;
        // unionpay 为 1 ~ 16 位的纯数字;
        // jdpay 限长 1 ~ 64 位不能重复的数字字母组合;
        // allinpay 限长 20 ~ 40 位不能重复的数字字母组合,必须以签约的通联的商户号开头(建议组合格式:通联商户号 + 时间戳 + 固定位数顺序流水号,不包含+号)

        if (channel == "allinpay") {
            orderNo += System.currentTimeMillis();
        }

        transferMap.put("order_no", orderNo);
        transferMap.put("amount", 200); // 付款金额,相关渠道的限额,请查看 https://help.pingxx.com/article/133366/ 。单位为对应币种的最小货币单位,例如:人民币为分。
        transferMap.put("type", "b2c"); // 付款类型,转账到个人用户为 b2c,转账到企业用户为 b2b(微信公众号 wx_pub 的企业付款,仅支持 b2c)。
        transferMap.put("currency", "cny");
        transferMap.put("recipient", channelRecipient(channel)); // 接收者

        // 备注信息。
        // 渠道为 unionpay 时,最多 99 个 Unicode 字符;
        // 渠道为 wx_pub 时,最多 99 个英文和数字的组合或最多 33 个中文字符,不可以包含特殊字符;
        // 渠道为 alipay 时,最多 100 个 Unicode 字符。
        // 渠道为 jdpay 最多100个 Unicode 字符。
        // 渠道为 allinpay 最多30个 Unicode 字符
        transferMap.put("description", "your description");

        transferMap.put("extra", channelExtra(channel));

        Map<String, String> app = new HashMap<String, String>();
        app.put("id", appId);
        transferMap.put("app", app);

        try {
            transfer = Transfer.create(transferMap);
            System.out.println(transfer);
        } catch (AuthenticationException e) {
            e.printStackTrace();
        } catch (InvalidRequestException e) {
            e.printStackTrace();
        } catch (APIConnectionException e) {
            e.printStackTrace();
        } catch (APIException e) {
            e.printStackTrace();
        } catch (ChannelException e) {
            e.printStackTrace();
        } catch (RateLimitException e) {
            e.printStackTrace();
        }
        return transfer;
    }

    /**
     * 根据 ID 查询
     *
     * 根据 ID 查询企业转账记录。
     * 参考文档:https://www.pingxx.com/api#api-t-inquiry
     * @param id
     */
    public void retrieve(String id) {
        Map<String, Object> param = new HashMap<String, Object>();
        try {
            Transfer transfer = Transfer.retrieve(id, param);
            System.out.println(transfer);
        } catch (AuthenticationException e) {
            e.printStackTrace();
        } catch (InvalidRequestException e) {
            e.printStackTrace();
        } catch (APIConnectionException e) {
            e.printStackTrace();
        } catch (APIException e) {
            e.printStackTrace();
        } catch (ChannelException e) {
            e.printStackTrace();
        } catch (RateLimitException e) {
            e.printStackTrace();
        }

    }

    /**
     * 批量查询
     *
     * 批量查询企业转账记录,默认一次查询 10 条,用户可以使用 limit 自定义查询数目,但是最多不超过 100 条。
     */
    public void list() {
        Map<String, Object> param = new HashMap<String, Object>();
        param.put("limit", 3);
        param.put("app[id]", appId);

        try {
            TransferCollection transferCollection = Transfer.list(param);
            System.out.println(transferCollection);
        } catch (AuthenticationException e) {
            e.printStackTrace();
        } catch (InvalidRequestException e) {
            e.printStackTrace();
        } catch (APIConnectionException e) {
            e.printStackTrace();
        } catch (APIException e) {
            e.printStackTrace();
        } catch (ChannelException e) {
            e.printStackTrace();
        } catch (RateLimitException e) {
            e.printStackTrace();
        }
    }

    private String channelRecipient(String channel) {
        String recipient = null;

        switch (channel) {
            case "wx_pub":
                // 渠道为 wx_pub 时,需要传 recipient 为用户在商户 appid 下的 open_id
                recipient = "o7xEMsySBFG3MVHI-9VsAJX-j50W";
                break;
            case "alipay":
                // 渠道为 alipay 时,若 type 为 b2c,为个人支付宝账号,若 type 为 b2b,为企业支付宝账号。
                recipient = "alipayaccount@gmail.com";
                break;
            case "unionpay":
            case "allinpay":
            case "jdpay":
                break;
        }

        return recipient;
    }

    private Map<String, Object> channelExtra(String channel) {
        Map<String, Object> extra = new HashMap<>();

        switch (channel) {
            case "alipay":
                extra = alipayExtra();
                break;
            case "wx_pub":
                extra = wxPubExtra();
                break;
            case "unionpay":
                extra = unionpayExtra();
                break;
            case "allinpay":
                extra = allinpayExtra();
                break;
            case "jdpay":
                extra = jdpayExtra();
                break;
        }

        return extra;
    }

    private Map<String, Object> alipayExtra() {
        Map<String, Object> extra = new HashMap<>();
        // 必须,收款人姓名,1~50位。
        extra.put("recipient_name", "张三");

        // 可选,收款方账户类型。可取值:1、 ALIPAY_USERID :支付宝账号对应的支付宝唯一用户号。以2088开头的16位纯数字组成。 2、 ALIPAY_LOGONID (默认值):支付宝登录号,支持邮箱和手机号格式。
        // extra.put("recipient_account_type", "ALIPAY_LOGONID");

        return extra;
    }

    private Map<String, Object> wxPubExtra() {
        Map<String, Object> extra = new HashMap<>();
        // 可选,收款人姓名。当该参数为空,则不校验收款人姓名。
        // extra.put("user_name", "张三");

        // 可选,是否强制校验收款人姓名。仅当  user_name 参数不为空时该参数生效。
        // extra.put("force_check", true);

        return extra;
    }

    private Map<String, Object> unionpayExtra() {
        Map<String, Object> extra = new HashMap<>();
        // 必须,1~32位,收款人银行卡号或者存折号。
        extra.put("card_number", "6228480402564890011");

        // 必须,1~100位,收款人姓名。
        extra.put("user_name", "张三");

        /**
         * open_bank_code 和 open_bank 两个参数必传一个,建议使用 open_bank_code ,若都传参则优先使用 open_bank_code 读取规则;prov 和 city 均为可选参数,如果不传参,则使用默认值 "上海" 给渠道接口。
         */

        // 条件可选,4位,开户银行编号,详情请参考 企业付款(银行卡)银行编号说明:https://www.pingxx.com/api#%E9%93%B6%E8%A1%8C%E7%BC%96%E5%8F%B7%E8%AF%B4%E6%98%8E。
        extra.put("open_bank_code", "0103");

        // 条件可选,1~50位,开户银行,详情请参考 企业付款(银行卡)银行编号说明:https://www.pingxx.com/api#%E9%93%B6%E8%A1%8C%E7%BC%96%E5%8F%B7%E8%AF%B4%E6%98%8E。
        extra.put("open_bank", "农业银行");

        // 可选,1~20位,省份。
        // extra.put("prov", "上海");

        // 可选,1~40位,城市。
        // extra.put("city", "上海");

        // 可选,1~80位,开户支行名称。
        // extra.put("sub_bank", "上海陆家嘴支行");

        return extra;
    }

    private Map<String, Object> allinpayExtra() {
        Map<String, Object> extra = new HashMap<>();
        // 必须,1~32位,收款人银行卡号或者存折号。
        extra.put("card_number", "6228480402564890011");

        // 必须,1~100位,收款人姓名。
        extra.put("user_name", "张三");

        // 必须,4位,开户银行编号,详情请参考 企业付款(银行卡)银行编号说明:https://www.pingxx.com/api#%E9%93%B6%E8%A1%8C%E7%BC%96%E5%8F%B7%E8%AF%B4%E6%98%8E。
        extra.put("open_bank_code", "0103");

        // 可选,5位,业务代码,根据通联业务人员提供,不填使用通联提供默认值09900。
        // extra.put("business_code", "09900");

        // 可选,1位,银行卡号类型,0:银行卡、1:存折,不填默认使用银行卡。
        // extra.put("card_type", 0);

        return extra;
    }

    private Map<String, Object> jdpayExtra() {
        Map<String, Object> extra = new HashMap<>();
        // 必须,1~32位,收款人银行卡号或者存折号。
        extra.put("card_number", "6228480402564890011");

        // 必须,1~100位,收款人姓名。
        extra.put("user_name", "张三");

        // 必须,4位,开户银行编号,详情请参考 企业付款(银行卡)银行编号说明:https://www.pingxx.com/api#%E9%93%B6%E8%A1%8C%E7%BC%96%E5%8F%B7%E8%AF%B4%E6%98%8E。
        extra.put("open_bank_code", "0103");

        return extra;
    }
}


1.4 运行结果
------- 创建 Transfer -------
------- 查询 Transfer -------
{
  "id": "tr_qLOaHKDinnT8a5uzn5z1q5qH",
  "object": "transfer",
  "type": "b2c",
  "created": 1576804656,
  "time_transferred": null,
  "livemode": false,
  "status": "scheduled",
  "app": "app_94e9e9Kin1",
  "channel": "unionpay",
  "order_no": "123456779",
  "amount": 100,
  "amount_settle": 100,
  "currency": "cny",
  "recipient": "6225220317083517",
  "description": "Your Description",
  "failure_msg": null,
  "transaction_no": null,
  "extra": {
    "open_bank_code": "0102",
    "card_number": "6225220317083517",
    "user_name": "User Name"
  },
  "metadata": {}
}
------- 查询 Transfer 列表 -------
{
  "object": "list",
  "url": "/v1/transfers",
  "has_more": false,
  "data": [
    {
      "id": "tr_GCO4yTLib1K8qL88a9e5Smj5",
      "object": "transfer",
      "type": "b2c",
      "created": 1576744952,
      "time_transferred": 1576744955,
      "livemode": false,
      "status": "paid",
      "app": "app_94e9e9HDuf1",
      "channel": "unionpay",
      "order_no": "123456789",
      "amount": 100,
      "amount_settle": 100,
      "currency": "cny",
      "recipient": "6225220317083517",
      "description": "Your Description",
      "failure_msg": null,
      "transaction_no": "426885",
      "extra": {
        "open_bank_code": "0102",
        "card_number": "6225220317083517",
        "user_name": "User Name"
      },
      "metadata": {}
    }
  ]
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PCI Express(PCIe)Mindshare 3是一种技术,它是一种用于计算机系统中传输数据的接口标准。PCIe Mindshare 3是PCIe技术的第三个版本,具有更高的带宽和更快的数据传输速度。 PCI Express是一个高性能、高带宽的总线架构,用于连接计算机内部的各种设备,例如图形卡、存储设备和扩展卡。与传统的PCI(Peripheral Component Interconnect)总线相比,PCIe提供了更快的数据传输速度和更低的延迟,以满足日益增长的计算需求。 PCIe Mindshare 3相对于以前的版本具有几个主要改进。首先,它提高了带宽,使得更多的数据可以同时传输,从而提高了系统的整体性能。其次,它引入了新的信令编码方案,减少了传输过程中的信号干扰,并提高了系统的可靠性。此外,PCIe Mindshare 3还增加了低功耗模式,使得计算机系统可以更有效地管理和利用能源。 PCIe Mindshare 3广泛应用于许多领域,包括个人电脑、服务器、工作站和高性能计算集群。在图形渲染和数据处理方面,PCIe Mindshare 3的高带宽和低延迟特性使得可以实现更快的图形绘制和数据处理速度,提供更流畅的用户体验。而在存储方面,PCIe Mindshare 3的高速传输能力使得可以实现更快的存储读写速度,提高数据存储和访问效率。 总之,PCIe Mindshare 3是一种先进的接口标准,为计算机系统提供了更高的性能和可靠性。它在各个领域的应用都具有重要意义,对于满足不断增长的计算需求和数据处理需求起到了关键作用。 ### 回答2: PCIe是一种高速串行总线技术,它是Peripheral Component Interconnect Express的缩写。PCIe标准为计算机之间的通信提供了一种快速和可靠的连接方式。Mindshare3是PCIe技术的一个版本,提供了一种更高速和更先进的通信协议。 PCIe Mindshare3具有以下特点: 1. 高速传输:PCIe Mindshare3提供了更高的数据传输速度,比之前的版本更快,可满足日益增长的数据处理需求。这种高速传输使计算机之间的通信更加快速和高效。 2. 兼容性:PCIe Mindshare3保持了与之前版本的兼容性,这意味着现有的PCIe设备可以与Mindshare3技术无缝连接,而不需要重新设计或更换硬件。这种兼容性为用户提供了更多的选择和灵活性。 3. 延迟优化:Mindshare3技术通过优化传输协议来降低通信延迟。传输延迟对于一些对实时性要求很高的应用程序非常重要,比如视频处理和游戏运行。Mindshare3的延迟优化使这些应用程序能够更加流畅地运行。 4. 增强的带宽:PCIe Mindshare3提供了更大的带宽,能够更有效地处理大量数据的传输。这使得高带宽需求的应用程序能够更好地运行,例如视频编辑和大数据分析等。 综上所述,PCIe Mindshare3作为一种更高速、更先进的通信协议,为计算机之间的数据传输提供了更快、更可靠、更灵活的解决方案。它的高速传输、兼容性、延迟优化和增强的带宽使得各种应用程序能够更加高效地运行,满足了不断增长的计算需求。 ### 回答3: PCIe Mindshare3 是PCI-SIG(Peripheral Component Interconnect Special Interest Group)开发的一项技术标准。PCIe是一种用于连接主板与各种扩展设备的总线协议,用于高速数据传输。 PCIe Mindshare3 是PCI-SIG发布的第三代PCIe规范,它引入了一系列新的特性和改进,以提供更高的性能和扩展性。以下是PCIe Mindshare3的一些主要特点: 1. 更高的带宽:PCIe Mindshare3支持更高的数据传输速率,最高可以达到16 GT/s(Giga Transfers per second),相较于之前的版本有了显著的提升。 2. 多链路技术:PCIe Mindshare3引入了多链路技术,使得多个PCIe设备可以同时共享总线带宽,提高了整体系统的性能。 3. NVMe支持:PCIe Mindshare3进一步增强了对NVMe(Non-Volatile Memory Express)固态硬盘的支持,提供更快的存储访问速度。 4. 电源管理:PCIe Mindshare3还提供了更精细的电源管理机制,可以根据设备需求灵活调整功耗,实现节能和更好的系统管理。 5. 较低的延迟:PCIe Mindshare3通过增加队列深度和其他优化措施,显著降低了数据传输的延迟,从而提供更快的响应速度。 通过这些创新和改进,PCIe Mindshare3使得更多的设备能够以更高的速度和更好的性能与计算机系统进行通信,为用户提供更好的使用体验。在未来的计算机系统中,我们可以期待看到更多采用PCIe Mindshare3技术的设备和硬件产品。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值