精华内容
下载资源
问答
  • 一码通收款
    2022-05-28 22:44:58

    微信支付宝收款码转账H5免签出码带备注可回调成功率99.9%支持重复支付多种轮询规则提高存活率
            本收款系统,可使用支付宝个人码 企业支付宝收款码 微信个人码收款,可以完成即时到账收款接口,并能实时通知到您的自定义网址。达到充值自动上分 增加金币自动发货等通知功能。免签接口高并发可以灵活配置风控规则,并支持一键升级省去后顾之忧,成功率稳定。支持支付


    package com.zjy.xzlive.util;
     
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import org.jdom.Element;
    import org.jdom.Document;
    import org.jdom.input.SAXBuilder;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import java.io.*;
    import java.net.ConnectException;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.security.MessageDigest;
    import java.util.*;
     
    public class WXAllUitls {
     
        public static final String allChar = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
     
        /**
         * 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。
         */
        public static String createSign(String characterEncoding, SortedMap<String, Object> parameters, String apiKey) {
            StringBuffer sb = new StringBuffer();
            Set es = parameters.entrySet();
            Iterator it = es.iterator();
            while (it.hasNext()) {
                Map.Entry entry = (Map.Entry) it.next();
                String k = (String) entry.getKey();
                Object v = entry.getValue();
                if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {
                    sb.append(k + "=" + v + "&");
                }
            }
            sb.append("key=" + apiKey);
            System.out.println(sb.toString());
            String sign = MD5Encode(sb.toString(), characterEncoding).toUpperCase();
            return sign;
        }
     
        public static String getRequestXml(SortedMap<String, Object> parameters) {
            StringBuffer sb = new StringBuffer();
            sb.append("<xml>");
            Set es = parameters.entrySet();
            Iterator it = es.iterator();
            while (it.hasNext()) {
                Map.Entry entry = (Map.Entry) it.next();
                String key = (String) entry.getKey();
                String value = (String) entry.getValue();
                if ("attach".equalsIgnoreCase(key) || "body".equalsIgnoreCase(key) || "sign".equalsIgnoreCase(key)) {
                    sb.append("<" + key + ">" + "<![CDATA[" + value + "]]></" + key + ">");
                } else {
                    sb.append("<" + key + ">" + value + "</" + key + ">");
                }
            }
            sb.append("</xml>");
            return sb.toString();
        }
     
        public static String MD5Encode(String origin, String charsetname) {
            String resultString = null;
            try {
                resultString = new String(origin);
                MessageDigest md = MessageDigest.getInstance("MD5");
                if (charsetname == null || "".equals(charsetname))
                    resultString = byteArrayToHexString(md.digest(resultString
                            .getBytes()));
                else
                    resultString = byteArrayToHexString(md.digest(resultString
                            .getBytes(charsetname)));
            } catch (Exception exception) {
            }
            return resultString;
        }
     
        private static String byteArrayToHexString(byte b[]) {
            StringBuffer resultSb = new StringBuffer();
            for (int i = 0; i < b.length; i++)
                resultSb.append(byteToHexString(b[i]));
     
            return resultSb.toString();
        }
     
        private static String byteToHexString(byte b) {
            int n = b;
            if (n < 0)
                n += 256;
            int d1 = n / 16;
            int d2 = n % 16;
            return hexDigits[d1] + hexDigits[d2];
        }
     
        private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
                "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
     
        //请求方法
        public static String httpsRequest(String requestUrl, String requestMethod, String outputStr) {
            try {
     
                URL url = new URL(requestUrl);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
     
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setUseCaches(false);
                // 设置请求方式(GET/POST)
                conn.setRequestMethod(requestMethod);
                conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
                // 当outputStr不为null时向输出流写数据
                if (null != outputStr) {
                    OutputStream outputStream = conn.getOutputStream();
                    // 注意编码格式
                    outputStream.write(outputStr.getBytes("UTF-8"));
                    outputStream.close();
                }
                // 从输入流读取返回内容
                InputStream inputStream = conn.getInputStream();
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                String str = null;
                StringBuffer buffer = new StringBuffer();
                while ((str = bufferedReader.readLine()) != null) {
                    buffer.append(str);
                }
                // 释放资源
                bufferedReader.close();
                inputStreamReader.close();
                inputStream.close();
                inputStream = null;
                conn.disconnect();
                return buffer.toString();
            } catch (ConnectException ce) {
                System.out.println("连接超时:{}" + ce);
            } catch (Exception e) {
                System.out.println("https请求异常:{}" + e);
            }
            return null;
        }
     
        //随机字符串生成
        public static String getRandomString(int length) { //length表示生成字符串的长度
            String base = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            Random random = new Random();
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < length; i++) {
                int number = random.nextInt(base.length());
                sb.append(base.charAt(number));
            }
            return sb.toString();
        }
     
        public static Map doXMLParse(String strxml) throws Exception {
            strxml = strxml.replaceFirst("encoding=\".*\"", "encoding=\"UTF-8\"");
     
            if (null == strxml || "".equals(strxml)) {
                return null;
            }
     
            Map m = new HashMap();
     
            InputStream in = new ByteArrayInputStream(strxml.getBytes("UTF-8"));
            SAXBuilder builder = new SAXBuilder();
            Document doc = builder.build(in);
            Element root = doc.getRootElement();
            List list = root.getChildren();
            Iterator it = list.iterator();
            while (it.hasNext()) {
                Element e = (Element) it.next();
                String k = e.getName();
                String v = "";
                List children = e.getChildren();
                if (children.isEmpty()) {
                    v = e.getTextNormalize();
                } else {
                    v = getChildrenText(children);
                }
     
                m.put(k, v);
            }
     
            //关闭流
            in.close();
     
            return m;
        }
     
        public static String getChildrenText(List children) {
            StringBuffer sb = new StringBuffer();
            if (!children.isEmpty()) {
                Iterator it = children.iterator();
                while (it.hasNext()) {
                    Element e = (Element) it.next();
                    String name = e.getName();
                    String value = e.getTextNormalize();
                    List list = e.getChildren();
                    sb.append("<" + name + ">");
                    if (!list.isEmpty()) {
                        sb.append(getChildrenText(list));
                    }
                    sb.append(value);
                    sb.append("</" + name + ">");
                }
            }
     
            return sb.toString();
        }
     
        /**
         * XML格式字符串转换为Map
         *
         * @param strXML XML字符串
         * @return XML数据转换后的Map
         * @throws Exception
         */
        public static Map<String, String> xmlToMap(String strXML) throws Exception {
            Map<String, String> data = new HashMap<String, String>();
            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder= documentBuilderFactory.newDocumentBuilder();
            InputStream stream = new ByteArrayInputStream(strXML.getBytes("UTF-8"));
            org.w3c.dom.Document doc = documentBuilder.parse(stream);
            doc.getDocumentElement().normalize();
            NodeList nodeList = doc.getDocumentElement().getChildNodes();
            for (int idx=0; idx<nodeList.getLength(); ++idx) {
                Node node = nodeList.item(idx);
                if (node.getNodeType() == Node.ELEMENT_NODE) {
                    org.w3c.dom.Element element = (org.w3c.dom.Element) node;
                    data.put(element.getNodeName(), element.getTextContent());
                }
            }
            try {
                stream.close();
            }
            catch (Exception ex) {
     
            }
            return data;
        }
     
        public static String generateString(int length) {
            StringBuffer sb = new StringBuffer();
            Random random = new Random();
            for (int i = 0; i < length; i++) {
                sb.append(allChar.charAt(random.nextInt(allChar.length())));
            }
            return sb.toString();
        }
     
        public static JSONObject httpsRequestALiYun(String url){
            URL uri = null;
            JSONObject result = null;
            try {
                uri = new URL(url);
                HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
                conn.connect();
                BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String lines = "";
                while ((lines = reader.readLine()) != null) {
                    result = JSON.parseObject(lines);
                }
                reader.close();
                conn.disconnect();
            }catch (Exception e){
                e.printStackTrace();
            }
            return result;
        }
     
        public static String querySjNum(){
            String a = "0123456789abcdefghijklmnopqrstuvwxyz";
            String sjNumber="";
            char[] rands = new char[32];
            for (int i = 0; i < rands.length; i++)
            {
                int rand = (int) (Math.random() * a.length());
                rands[i] = a.charAt(rand);
            }
            for(int i=0;i<rands.length;i++){
                sjNumber += rands[i];
            }
            return sjNumber;
        }
     
     
    }
    微信扫码支付和H5的签名

        //获取微信sign--H5支付
        public String querySignH5(PayWechat payWechat,String price,String ip,String WXNonceStr,String WXOutTradeNo){
            String sign = "";
            SortedMap<String, Object> mapSign = new TreeMap<>();
            mapSign.put("appid", payWechat.getAppid());
            mapSign.put("mch_id", payWechat.getMchId());
            mapSign.put("nonce_str", WXNonceStr);
            mapSign.put("body", WXBody);
            mapSign.put("out_trade_no", WXOutTradeNo);
            mapSign.put("total_fee", price);
            mapSign.put("spbill_create_ip", ip);
            mapSign.put("notify_url", WXNotifyUrl);
            mapSign.put("trade_type", trade_type_H5);
            sign = WXAllUitls.createSign("UTF-8", mapSign, payWechat.getApiKey());
            return sign;
        }
     
        //获取微信sign--扫码支付
        public String querySignSaoma(PayWechat payWechat,String price,String ip,String WXNonceStr,String WXOutTradeNo){
            String sign = "";
            SortedMap<String, Object> mapSign = new TreeMap<>();
            mapSign.put("appid", payWechat.getAppid());
            mapSign.put("mch_id", payWechat.getMchId());
            mapSign.put("nonce_str", WXNonceStr);
            mapSign.put("body", WXBody);
            mapSign.put("out_trade_no", WXOutTradeNo);
            mapSign.put("total_fee", price);
            mapSign.put("spbill_create_ip", ip);
            mapSign.put("notify_url", WXNotifyUrl);
            mapSign.put("trade_type", trade_type_SM);
            sign = WXAllUitls.createSign("UTF-8", mapSign, payWechat.getApiKey());
            return sign;
        }
     
    //获取公网ip,注意格式
        public static String getPublicIp() {
            try {
                String path = "http://2018.ip138.com/ic.asp";// 要获得html页面内容的地址
                //String path = "https://www.jiatui.com/new/js/city-picker.data.js";
                URL url = new URL(path);//
                // 创建url对象
     
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 打开连接
     
                conn.setRequestProperty("contentType", "GBK"); // 设置url中文参数编码
     
                conn.setConnectTimeout(5 * 1000);// 请求的时间
     
                conn.setRequestMethod("GET");// 请求方式
     
                InputStream inStream = conn.getInputStream();
                // readLesoSysXML(inStream);
     
                BufferedReader in = new BufferedReader(new InputStreamReader(
                        inStream, "GBK"));
                StringBuffer buffer = new StringBuffer();
                String line = "";
                // 读取获取到内容的最后一行,写入
                while ((line = in.readLine()) != null) {
                    buffer.append(line);
                }
                String str = buffer.toString();
                Document doc = Jsoup.parse(str);
                Elements e = doc.select("center");
    //            System.out.println("str======"+str);
    //            String ipString1 = str.substring(str.indexOf("您的IP是:["));
    //            // 获取你的IP是中间的[182.149.82.50]内容
    //            String ipsString2 = ipString1.substring(ipString1.indexOf("[") + 1,
    //                    ipString1.lastIndexOf("]"));
    //            //获取当前IP地址所在地址
    //            String ipsString3=ipString1.substring(ipString1.indexOf(": "),ipString1.lastIndexOf("</center>"));
    //            System.err.println(ipsString3);
     
                // 返回公网IP值
                return e.text();
     
            } catch (Exception e) {
                System.out.println("获取公网IP连接超时");
                return "";
            }
        }
    发起支付
     

        @ResponseBody
        @RequestMapping("/sendWXpay")
        public WXPayDto sendWXpay(String userGid, String price, String type, String loginName){
            WXPayDto wXPayDto = new WXPayDto();
            wXPayDto.setUserGid(userGid);
            Double money = 0.0;
            String code_url = null;
            String ip = PublicInterIp.getPublicIp();
            int first = ip.lastIndexOf("[");
            int last = ip.lastIndexOf("]");
            ip = ip.substring(first+1,last);
            String WXNonceStr = WXAllUitls.getRandomString(32);
            wXPayDto.setWXNonceStr(WXNonceStr);
            String WXOutTradeNo =String.valueOf(System.currentTimeMillis());
            wXPayDto.setWXOutTradeNo(WXOutTradeNo);
            SortedMap<String, Object> mapSign = new TreeMap<String, Object>();
            PayWechat payWechat = payWechatService.selectByPrimaryKey();
            mapSign.put("appid", payWechat.getAppid());
            mapSign.put("mch_id", payWechat.getMchId());
            mapSign.put("nonce_str", WXNonceStr);
            mapSign.put("body", WXBody);
            mapSign.put("out_trade_no", WXOutTradeNo);//订单号(我方)
            mapSign.put("total_fee", price);
            mapSign.put("spbill_create_ip", ip);
            mapSign.put("notify_url", WXNotifyUrl);
            if(type.equals("1")){//扫码支付
                String sign = querySignSaoma(payWechat,price,ip,WXNonceStr,WXOutTradeNo);
                mapSign.put("trade_type", trade_type_SM);
                mapSign.put("sign",sign);
                String requestXML = WXAllUitls.getRequestXml(mapSign);
                System.out.println(requestXML);
                String result = WXAllUitls.httpsRequest(WXPayUrl, "POST", requestXML);
                System.out.println(result);
                Map<String, String> map = new HashMap<>();
                try {
                    map = WXAllUitls.doXMLParse(result);
                    String return_code = map.get("return_code");
                    if (return_code.contains("SUCCESS")) {
                        code_url = map.get("code_url");//获取到code_url
                        code_url = imgUrl(code_url,userGid);
                        wXPayDto.setCodeUrl(code_url);
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }finally {
                }
            }else{//H5支付
                String sign = querySignH5(payWechat,price,ip,WXNonceStr,WXOutTradeNo);
                mapSign.put("trade_type", trade_type_H5);
                mapSign.put("sign",sign);//scene_info
                //mapSign.put("scene_info",scene_info);
                String requestXML = WXAllUitls.getRequestXml(mapSign);
                System.out.println(requestXML);
                String result = WXAllUitls.httpsRequest(WXPayUrl, "POST", requestXML);
                System.out.println(result);
                Map<String, String> map = new HashMap<>();
                try {
                    map = WXAllUitls.doXMLParse(result);
                    String return_code = map.get("return_code");
                    if (return_code.contains("SUCCESS")) {
                        code_url = map.get("mweb_url");//获取到mweb_url为拉起微信支付收银台的中间页面,可通过访问该url来拉起微信客户端,完成支付,mweb_url的有效期为5分钟
                        wXPayDto.setCodeUrl(code_url);
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }finally {
                }
     
            }
             //处理业务信息
           return null;
     
        }
    回调
    推荐一个内网穿透地址https://www.ngrok.cc/
     

        //支付完成回调
        @RequestMapping("/WXCallBack")
        public String payReturnRequest(HttpServletRequest request,HttpServletResponse response){
            System.out.println("进入回调");
            String tradState = "";
            String xmlString = "";
            String resXml = "";
            try {
                xmlString = getXmlString(request);
                System.out.println("微信返回的回调结果是:::::::" + xmlString);
                // 先解析返回的数据
                Map<String, String> dataMap = WXAllUitls.xmlToMap(xmlString);
                String returnCode = dataMap.get("return_code");//返回码
                String outTradeNo = dataMap.get("out_trade_no");//商户订单号
                String transactionId = dataMap.get("transaction_id");//微信支付订单号
                String nonceStr = dataMap.get("nonce_str");//随机字符串
     
                //
     
                //查询微信订单号状态 tradState
                // SUCCESS—支付成功
                //
                //REFUND—转入退款
                //
                //NOTPAY—未支付
                //
                //CLOSED—已关闭
                //
                //REVOKED—已撤销(刷卡支付)
                //
                //USERPAYING--用户支付中
                //
                //PAYERROR--支付失败(其他原因,如银行返回失败)
                tradState = setQueryWXOrderInfo(userGid, outTradeNo,nonceStr);
                System.out.println("该微信订单号状态:"+tradState);
                // 通知微信闭嘴,交易完成无需回调
                if("SUCCESS".equals(returnCode)){
                    resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>"
                            + "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";
                    //处理业务
                }else{
                    resXml = "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>"
                            + "<return_msg><![CDATA[报文为空]]></return_msg>" + "</xml> ";
                    //处理业务
                }
                BufferedOutputStream out = new BufferedOutputStream(
                        response.getOutputStream());
                out.write(resXml.getBytes());
                out.flush();
                out.close();
     
            }catch (Exception e){
                e.printStackTrace();
            }
     
            return tradState;
        }
     
    //查询订单状态
        @RequestMapping("/taskQueryOrderStatu")
        public String setQueryWXOrderInfo(String gid,String WXOutTradeNo,String WXNonceStr){
            String path = ServiceImgUrl+gid+".jpg";
            String trade_state = "";
            SortedMap<String, Object> mapSign = new TreeMap<String, Object>();
            PayWechat payWechat = payWechatService.selectByPrimaryKey();
            mapSign.put("appid", payWechat.getAppid());
            mapSign.put("mch_id", payWechat.getMchId());
            mapSign.put("nonce_str", WXNonceStr);
            mapSign.put("out_trade_no", WXOutTradeNo);//订单号
            String sign = WXAllUitls.createSign("UTF-8", mapSign, payWechat.getApiKey());
            mapSign.put("sign",sign);
            String requestXML = WXAllUitls.getRequestXml(mapSign);
            String result = WXAllUitls.httpsRequest(queryWXOrderInfo, "POST", requestXML);
            System.out.println(result);
            Map<String, String> map = new HashMap<>();
            try {
                map = WXAllUitls.doXMLParse(result);
                String return_code = map.get("return_code");
                if (return_code.contains("SUCCESS")) {
                    trade_state = map.get("trade_state");//获取到code_url
                    File file = new File(path);
                    if(file.exists()){
                        file.delete();
                    }
                }
            }catch (Exception e){
                e.printStackTrace();
            }finally {
            }
            return trade_state;
        }
    二维码图片使用流返回即可

    pom.xml
     

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
     
        <groupId>com.zjy</groupId>
        <artifactId>xzlive</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
     
        <name>xzlive</name>
        <description>Demo project for Spring Boot</description>
     
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.6.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
     
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.7</java.version>
            <swagger.version>2.7.0</swagger.version>
            <google.guava>18.0</google.guava>
            <fastjson.version>1.2.47</fastjson.version>
            <poi.version>3.17</poi.version>
            <jwt.version>0.9.0</jwt.version>
            <mybatis.version>1.3.2</mybatis.version>
        </properties>
     
        <dependencies>
            <!-- web-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
            <dependency>
                <groupId>org.jsoup</groupId>
                <artifactId>jsoup</artifactId>
                <version>1.11.3</version>
            </dependency>
     
            <dependency>
                <groupId>com.qiniu</groupId>
                <artifactId>qiniu-java-sdk</artifactId>
                <version>[7.0.9]</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.5</version>
            </dependency>
     
            <dependency>
                <groupId>net.glxn.qrgen</groupId>
                <artifactId>javase</artifactId>
                <version>2.0</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <!-- 支付宝即时到账接口 -->
            <dependency>
                <groupId>com.pentahohub.nexus</groupId>
                <artifactId>alipay-sdk-java</artifactId>
                <version>20150820220052</version>
            </dependency>
     
            <dependency>
                <groupId>org.jdom</groupId>
                <artifactId>jdom</artifactId>
                <version>1.1</version>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>4.5.3</version>
            </dependency>
     
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>${google.guava}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.8</version>
            </dependency>
     
            <!-- <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId>
                </dependency> -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
            </dependency>
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
            </dependency>
     
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
     
            <dependency>
                <groupId>commons-httpclient</groupId>
                <artifactId>commons-httpclient</artifactId>
                <version>3.1</version>
            </dependency>
            <!--<dependency>-->
            <!--<groupId>org.springframework.boot</groupId>-->
            <!--<artifactId>spring-boot-starter-security</artifactId>-->
            <!--</dependency>-->
            <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-jexl -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-jexl</artifactId>
                <version>2.1.1</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>${swagger.version}</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-bean-validators</artifactId>
                <version>${swagger.version}</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>${swagger.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-mail</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
     
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>${poi.version}</version>
            </dependency>
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt</artifactId>
                <version>${jwt.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-pool2</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.41</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>1.2.5</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-mongodb</artifactId>
            </dependency>
            <dependency>
                <groupId>commons-lang</groupId>
                <artifactId>commons-lang</artifactId>
                <version>2.5</version>
            </dependency>
        </dependencies>
     
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
     
     
    </project>
     

    更多相关内容
  • zzpay ZZPay-开源个人收款系统,支持支付宝,微信收款码,资金直接到达本人账号,免签通道个人移动端自动更改,不需提现,不需备案,完全免费,个人收款0风险方案。ZZPay-开源个人收款系统ZZPay是基于php + mysql...
  • 我的个人网站如何实现支付功能?基于xposed逆向微信、支付宝、云闪付来...项目地址: https://github.com/cinser/weixin-alipay-yunshanfu-xposed-pay (tag:个人收款,免签支付,微信免签,支付宝免签,云闪付免签)
  • 通码支付通刷app下载

    2016-11-06 11:56:40
    福建国通星驿网络有限公司,拥有人行支付牌照,强势推出刷2代二维码支付【通码支付】,通码支付支持信用卡刷卡,使用激活00001769,注册即0.38%费率。适用于个人小额信用卡消费,店铺微信支付,卡奴必备神器! ...
  • 中信全付款使用安全的收款支付软件,轻松在线,操作简单安全。软件具备在线计算器,扫支付等功能,为用户提供更便捷的手机支付服务,而且还可以管理你的资金,查看交易信息等。为商户提供站式收银、管理、...
  • 善付是在善融商务建立的,为供应链中具有一定主导地位的客户与其上下游间交易提供信息协同、结算对账及经营分析的服务专区。 善付解决企业传统订单管理、对外协同、收付款等环节分离所造成的对账工作量大、出错...
  • 个人收款码跟聚合的区别

    千次阅读 2021-04-30 11:47:16
    我们去到菜场或者一些私人小餐馆的时候,商家一般都会在收银台拜访两个收款码个是支付宝的收款码个是微信收款码,上面会印有各种各样不同的头像,这个就是商家的个人收款码,消费者可以扫对应的收款码进行...

    移动支付覆盖遍地,随处可见各种各样的收款码,这些收款码看着大同小异,但其中奥义甚多。你,有了解过吗?

    对于店铺不同规格大小的商户,使用的收款码也会不一样。
    在这里插入图片描述

    我们去到菜场或者一些私人小餐馆的时候,商家一般都会在收银台拜访两个收款码,一个是支付宝的收款码,一个是微信收款码,上面会印有各种各样不同的头像,这个就是商家的个人收款码,消费者可以扫对应的收款码进行支付。

    个人收款码无需通道手续费,所以很多中小型商户为了节省手续费会选择将个人收款码放在店铺进行收款,但其实个人收款码存在很多弊端,结果往往是得不偿失。

    一、收款额度受限

    个人收款码商家的经营收款是收到个人零钱里的,付款给供应商或转账给他人时,金额多了会遇到零钱支付限额的问题;提现需要手续费。

    二、不支持花呗、信用卡等超前消费模式

    个人收款码不支持花呗、信用卡等支付方式,消费者只能通过余额或者银行卡进行支付。如今8090后成为了市场中的主力消费群体,而花呗、信用卡又深受他们的青睐,如果店铺不支持花呗信用卡支付,那么极有可能会损失一大批客户,这对商家来说是一笔极大的损失。

    三、商家整理账目需要耗费大量时间

    个人收款码没有后台数据,收款账目混乱,商户需要先整理支付宝端的收款数据,再整理微信端的收款数据,这需要花费大量时间。

    四、顾客支付要选择相应的支付渠道,不能实现一码多通。

    使用个人收款码进行收款,会给商家和消费者都造成极大程度的不便。于是,聚合支付码出现了。

    聚合支付是一个将多种互联网支付方式整合起来的支付接口,实现了在商户的收银台将各式各样的二维码集中到一起,聚合了微信支付、支付宝、百度钱包、京东钱包、银联等多个支付通道,而非单一支付通道。
    在这里插入图片描述

    那么聚合支付码有什么优势呢?

    一、一码多通,消费者支付方便

    在聚合支付码应用到店铺以后,可以实现一码多通,不管消费者是通过支付宝微信付款,还是百度钱包京东钱包进行付款,扫一个聚合支付码就可以轻松完成支付。

    二、商家对账方便

    商户对账方便、简单。定期推送所有订单明细记录、收银金额汇总、每个支付方式分别收款的明细等等信息,能够做到一应俱全、一目了然,商家再也不用耗费大量时间在对账上。

    三、不仅是收款码,还可以是营销码

    如今个别支付公司所提供的聚合支付系统,如网付,支持多种营销方式,比如网付聚合支付支付后的广告,当消费者支付完成后会产生一条商家广告,让消费者对商家的印象更深刻。另外还有网付推出的会员系统,客户注册即可送券,会员卡充值满就送,利用各种活动吸引顾客充值,后期可以向顾客直接推送店面活动,吸引顾客再次进店消费。

    虽然在“外观”上并没有较大差别,但是探其根本,个人收款码相对比聚合支付码存在较多不足。

    商户若想方便客户,也想为自己节省些时间,聚合支付码会是不二选择。

    展开全文
  • Hello,我是楼下小黑哥! 今天跟大家分享一下聚合收款码的支付原理,这也是我这大半年来一直在做的项目。 微信/支付宝收款码大家应该不会陌生,线下小微商户收款大多使用这个,就比如下图。...收款

    Hello,我是楼下小黑哥!

    今天跟大家分享一下聚合收款码的支付原理,这也是我这大半年来一直在做的项目。

    微信/支付宝收款码大家应该不会陌生,线下小微商户收款大多使用这个,就比如下图。

    这种收款方式很方便,微信、支付宝后台申请开通,然后还可以免费申请相关物料。

    不过这种方式用户体验其实不是很好,之前有好几次拿出支付宝,却扫了微信支付码。

    另外,这种个人的收款码通常还有单日收款的上限,比如支付宝单日上限 500元。

    有了需求,自然会有聪明人人想到解决方案,于是有了聚合收款码产品解决方案,如下图。

    一个收款码,支持多种客户端,主流是微信、支付宝,现在常见还会支持银联,QQ 等。

    用户选择任一支持的客户端扫码,都能完成支付,再也不用纠结扫错码的尴尬。

    有没有很神奇?其实底层原理很简单,看完你就明白了,下面就让小黑哥带你解密聚合收款码的底层原理。

    欢迎关注我的公众号:程序通事,获得日常干货推送。
    如果您对我的专题内容感兴趣,也可以关注我的博客:studyidea.cn

    微信相关支付方式

    聚合收款码底层支付其实还是离不开微信、支付宝支持的支付方式,所以我们先从微信支付宝渠道出发,简单介绍这个过程将会使用的支付方式。

    上篇文章,我们以支付宝为例来介绍,这次我们就以微信支付为例。

    打开微信支付官网,可以看到很多支付方式。

    其中付款码支付在前两篇文章完整介绍过,这里不再介绍,感兴趣的小伙伴可以看下下面这两篇文章。

    手机没网了,却还能支付,这是什么原理?|原创

    轻轻一扫,立刻扣款,付款码背后的原理你不想知道吗?|原创

    首先我们介绍一下微信Native支付,引用微信官网的解释:

    Native支付是商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。

    简单来讲就是商户后台调用微信支付接口,微信返回预支付交易的链接,格式如下:

    weixin://wxpay/bizpayurl?sr=123456
    

    然后商户将其转为二维码,提供给客户使用微信扫码支付。

    来自微信支官网

    这种支付方式可以应用在 PC 网站购物场景,比如说英雄联盟官网购买相关游戏道具:

    既然微信Native支付最后可以变成二维码完成支付,那么聚合收款码是不是可以采用微信Native支付这种支付方式呢?

    答案是可以,但是不适合,产品体验不太好。

    最好使用微信支付另外一种支付产品JSAPI 支付

    至于原因,不要急,接下去看就会明白。

    JSAPI 支付,又被称为公众号支付,名词解释引用一下官网介绍:

    JSAPI 支付是用户在微信中打开商户的 H5 页面,商户在 H5 页面通过调用微信支付提供的 JSAPI 接口调起微信支付模块完成支付。

    具体业务流程如下:

    来自微信支官网

    日常生活中,很多应用场景使用这种支付方式,比如说:极客时间公众号上购买课程

    这种支付方式相对于微信Native支付,比较麻烦,还需要使用微信公众号登录授权功能,以此获取用户的 openid。

    另外当我们调用微信 JSAPI 后台接口,拿到微信返回的相关参数之后,我们还需要使用微信的 JSSDK,这样才能唤起微信支付。

    聚合收款码核心原理

    了解完聚合支付的所需要的底层支付方式,下面我们来了解一下聚合收款码的核心原理。

    聚合收款码业务流程如下:

    聚合收款码

    第一步用户使用微信/支付宝 APP 扫码之后,将会打开一个收银台页面。

    这个收银台页面可以自适应,不同 APP 显示不同的样式,比如支付宝打开收银台显示支付宝的 logo,微信打开就会显示微信的 logo。

    第二步用户在收银台输入金额,点击支付之后将会唤起 APP 的支付弹窗。

    好了,观察这个流程,我们可以发现扫码之后,后台应用需要识别出当前 APP 到底是微信还是支付宝。

    那如何判断当前使用的 APP 呢?

    其实这个原理很简单,在支付宝/微信打开一个链接,实际将会使用内置的浏览器发起了 HTTP 请求,而 HTTP 的请求头将会携带 User-Agent(UA),用来标识用户代理软件的应用类型、操作系统、软件开发商以及版本号。

    微信/支付宝中浏览器发起 HTTP 请求,携带的 User-Agent 分别为:

    支付宝
    UCBrowser/11.5.0.939 UCBS/2.10.1.6 Mobile Safari/537.36 AliApp(AP/10.0.15.051805) AlipayClient/10.0.15.051805 Language/zh-Hans
    
    微信
    MQQBrowser/6.2 TBS 043220 Safari/537.36 MicroMessenger/6.5.8.1060 NetType/4G Language/zh_CN
    

    这里需要注意了,不同型号的手机,不同的版本 APP,User-Agent 不一定会一样,其实我们只需要判断是否包含某些关键字即可,比如说只要 User-Agent 包含 MicroMessenger 就是微信,包含 AlipayClient 就是支付宝。

    下面使用 Java 代码为例:

    String userAgent = request.getHeader("user-agent");
    if (Objects.equals(userAgent, "AlipayClient")) {
        // 支付宝
    
    } else if (Objects.equals(userAgent, "MicroMessenger")) {
        // 微信
    }
    

    这个问题解决之后,后面的流程就很简单了,只要调用微信/支付宝的 JSAPI 支付接口,拿到相关参数之后,唤起支付。

    准确来讲,支付宝那边 JSAPI 支付官方名称为支付宝生活号支付。

    这里解释一下上面的问题,为什么聚合收款码不能使用微信Native支付呢?

    主要是因为微信Native支付接口返回是一个微信自定义 schema 协议,只能通过微信扫码打开,唤起支付。

    如何聚合收款码使用微信Native支付,收银台提交金额之后,需要将微信返回交易链接转成二维显示在页面,然后用户使用微信内置识别二维码功能唤起支付。

    这样一来比较影响产品体验,降低支付的成功率。

    支付宝也有类似微信Native支付支付接口-当面付扫码支付,成功调用之后也会返回支付链接。

    那这里可以提大家提个小问题,聚合收款码是否可以使用支付宝当面付扫码支付接口那?

    答案是可以的,而且体验比微信Native支付好。

    这是因为支付宝返回链接是一个标准 HTTP 连接,如下:

    https://qr.alipay.com/xxxx
    

    这个链接只要在支付宝内中打开,就可以唤起支付。

    所以如果聚合收款码使用支付宝当面付扫码支付接口,收银台金额提交之后,当拿到支付宝返回的支付链接,应用程序内只要使用 HTTP 302 跳转到支付链接,就可以唤起支付宝支付。

    画外音:之前我也一直以为支付宝跟微信一样,不能使用。

    那这样实际上聚合收款码底层使用支付方式就有了两种方案:

    • 微信 JSAPI 支付/支付宝生活支付
    • 微信 JSAPI 支付/支付宝面付扫码支付

    那如何选择那?
    个人建议使用第一种方案,微信、支付宝都采用 JSAPI 支付。

    主要是因为只要 302 跳转唤起支付宝支付,就会关闭我们收银台页面,这样一来整个微信支付与支付宝支付流程就不太一样了

    其次,当用户支付成功之后,JSAPI 支付还可以跳转到一个成功页面,这个页面我们可以支付结果展示,或者骚一点,还可以挂些广告,或者引流其他公号上。

    但是如果使用付宝面付扫码支付,支付完成之后,页面就被关闭了,就没办法完成支付页面跳转。

    聚合收款码核心流程

    介绍完原理,下面主要介绍一下市面上主流聚合收款码业务流程,其实聚合收款码可以分为三类:

    • 静态聚合收款码
    • 动态聚合收款码
    • 银联静态二维码

    静态聚合收款码就类似如下这种,需要用户主动输入金额,可以无限次使用。

    静态收款码

    而动态聚合收款码是只能使用一次,并且由商家指定金额,用户只要扫码就可以支付指定金额。

    这种应用场景比如 B 站购买大会员:

    银联静态二维码其实功能上与静态聚合收款码差不多,但是它多了支持银联支付的功能。

    除了这个以外,最主要的区别是银联静态二维码是银联发码,背后对应的地址是银联的地址,类似如下:

    https://qr.95516.com/00010000/xxx
    

    静态聚合收款码流程

    静态聚合收款码主要支付流程主要可以分为二步,第一步为登录授权。

    聚合收款码-登录授权

    这里的登陆授权一般使用微信、支付宝匿名登录授权功能,这样这个过程普通用户其实是无感知的。

    画外音:如果是程序员的话,可能会感受到这个过程经过了多次跳转。

    第二步,用户在收银台输入金额之后,应用内部将会创建相应的订单,然后再调用微信/支付宝的 JSAPI 支付。

    聚合收款码-JSAPI支付

    另外,如果支付宝采用面付扫码支付这种支付方式的话,那么其实不需要第一步登录授权了,可以直接跳到收银台发起支付。

    聚合收款码-支付宝 native 支付

    动态聚合收款码流程

    动态聚合收款码其实与静态收款码总体比较类似,只不过创建动态码内部已经创建了相应的订单,后续流程与静态聚合收款码差不多。

    聚合收款码-动态码内部创单

    银联静态二维码流程

    如果你使用微信、支付宝扫码打开银联二维码,将会打开我们自己收银台页面,后续流程其实跟静态聚合收款码一模一样的。

    但是如果你使用支付银联支付的 APP 扫码,比如说各大银行的手机 APP,美团,京东等,就会在这些 APP 内各自支付页面,然后完成支付。

    我们银联二维码的功能,将会在银联后台报备一个跳转地址,比如说

    https://www.heihei.com
    

    当用户使用微信/支付宝访问银联二维码,银联后台自己识别访问请求 User-Agent ,然后后台根据规则拼接重定向地址。

    拼接规则如下:

    https://www.heihei.com?qrCode=URLENCODE(https://qr.95516.com/00010000/xxx)
    

    聚合收款码-银联二维码扫码流程

    总结

    聚合收款码统一了用户支付流程,提高商家的收款效率。

    另外聚合收款码其实还可以跟商家后台一些 ERP 等软件打通,这样还提高的商家生产效率。

    不得不说,第一个设计出聚合收款码的的产品,真实个鬼才~

    聚合收款码,背后原理一点也不难,根据用访问请求的 User-Agent ,以此判断用户当前扫码使用的客户端类型。

    然后调用微信/支付宝匿名登录获取用户 id,最后用户输入金额之后,调用微信/支付宝完成支付。

    好了,今天文章介绍到这里,最后,点个赞再走吧~

    嘻嘻,国庆就要到了,大家再熬几天!!!

    相关资料

    1. https://pay.weixin.qq.com/wiki/doc/api/index.html
    2. https://opendocs.alipay.com/open/194
    3. https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html
    展开全文
  • 相信很多商家朋友见过很多超市或者其他营业场所,在收款的时候收银台上只放了个二维码,但是顾客既可以用微信扫支付,又可以用支付宝扫支付,而且还支持信用卡和花呗支付,很是方便,顾客支付体验良好。...

    e18b378f16446860de907ebc80277dc9.png

    176f0709732eb47c876f2e840681f62e.png

    相信很多商家朋友见过很多超市或者其他营业场所,在收款的时候收银台上只放了一个二维码,但是顾客既可以用微信扫码支付,又可以用支付宝扫码支付,而且还支持信用卡和花呗支付,很是方便,顾客支付体验良好。

    那是商家申请了微信支付商家收款码和支付宝商家收款码,并且进行了合并,所以展示的就是一个二维码,实际上微信和支付宝都可以扫码付款。

    所以作为商家,其实只要把微信和支付宝这两种支付方式合并了,那么其实几乎可以收所有的钱了。合并之后可实现微信、支付宝、花呗、信用卡四种方式支付。

    这个就是合并之后的收款二维码,即一码付

    f73328eb0d686a16f4a9beab429385f5.png

    敲 · 黑 · 板

    一码付(聚合码、合并码)并不是指你的个人微信或者支付宝收款码合并,而是指微信商业收款码和支付宝商业收款码的合并。

    因此想要申请一码付的商家需要先申请微信收款商业版收款码,再申请支付宝商业版收款码,最后再进行合成。

    1

    一码付的优势

    支持微信支付、支付宝支付、信用卡支付、花呗支付;

    支付渠道安全,均是通过微信和支付宝官方申请,结算也是官方;

    顾客消费后支付体验良好。

    2

    一码付申请流程

    注意:必须在我们这里申请才可以申请降低费率,由0.6%调低至0.38%,一定记得。此外,在我们这里申请还可接入支付宝收款,实现一个码微信支付宝同时支付。

    首先,选择适合你申请的微信商业收款码,点击查看申请流程

    cb75173f5f63ac73727bfa5ffb5a9da6.png

    ▲没有营业执照的商家申请小微商户点这里 ▲个体工商户申请微信商业收款码点这里 ▲公司企业申请微信商业收款码点这里

    点击下方申请↓

    0706f7d0193b38c3d91703ecc47e9555.png

    其次,按照上面指示申请好微信商业收款码之后,提交支付宝相关信息,我们辅助您申请支付宝商业版收款码(这个个人无法完成)。提交路径:一码付->提交支付宝资料。信息如下:

    ① 支付宝号(注册的手机号或者邮箱)

    ② 营业执照(没有也行,有的话收款不限额)

    ③ 店铺门头照片(没有也行,我们提供,最好用自己的)

    ④ 姓名、电话、邮箱

    0f935cad4b415238b1b5aeff337c48d8.png

    (长按识别提交)

    3

    申请问答

    Q:一码付有费率吗?是多少?

    A:有,因为一码付本身就是微信和支付宝商业收款码的合并,费率0.38%

    Q:申请一码付之后收款到哪里了?

    A:顾客微信支付的走微信官方支付通道第二天直接结算到了银行卡里,支付宝支付的秒到支付宝余额,随时可以提现。

    Q:商城入口

    3908e308eedf9b4e45bddbeeba5344ec.png

    Q:一码付物料贴纸提供吗?

    A:一码付的贴纸商城有,识别上面“智能收款设备”小程序直接购买即可,如果你购买了腾讯云喇叭,会免费赠送你2张。

    Q:顾客不在店里,如何远程收款?

    A:禁止将一码付的收款码发给顾客,让顾客长按识别付款,会导致封号无法收款,顾客将二维码保存至相册扫描本地图片付款也绝对禁止,同样的道理。正确的做法是打开微信收款商业版小程序,点击“收款单”,使用它来远程收款。

    Q:申请好的收款码无法收款了,怎么回事?

    A:发生这种情况一定是你违规收款了,一下情况都将导致这一后果:你的二维码被顾客长按识别付款、自己给自己付款以及其他的一些违法违规的收款。

    6253048a12f903fb612599c7bdcd1a3e.png

    联系我们:18911595062

    0191a646fa299362ed224278960731cd.gif 支付产品服务专家

    公司:数字生态

    数字生态(北京)科技有限公司是微信和支付宝的双渠道服务商,微信支付直连通道,资金安全有保障。

    专注于商家智慧收银、电商支付,提供收银机、收银软件系统、扫码盒子、扫码枪、智能POS、刷脸支付、云喇叭,微信支付宝一码多付等商业收款产品。

    (长按识别关注我们获取更多收款码资讯)

    bc9b043ced4ec2a4840d15b63b4838db.png

    展开全文
  • 可以用来给个人商户开通公众号收款使用,扫后输入金额付款即可。 1.微信端自助申请,或者后台直接添加,后台人工审核为手动结算商户。 2.结算方式: 1)自动即时结算 2)商户提现 3)后台管理人员手动为商户...
  • 如何开通聚合商家收款码

    千次阅读 2022-01-21 18:50:00
    传统的线下支付方式,客户用现金向商家支付,手交钱手交货,钱直接到了商家手上。到了移动互联网时代,手机端的支付宝、微信支付成了广大消费者越来越接受的支付方式,加上近期银联联合各商业银行推动的云闪付...
  • 章、收款机简要介绍...................................................................................1 1、安全指导.....................................................................................
  • 源支付是款专业的聚合免签收款系统,无需对接其他平台,个即可收款,灰常的方便快捷,集成实现三网免挂功能,无需挂繁琐的监控软件即可实现回调,更便捷的监控方式,更优的产品质量,更可靠的服务态度,值得您的选择!...
  • 、PayPal 定位为跨境电商从海外B2C平台轻松收款的高效选择,目前为全球最大在线支付提供商,全球用户接近1.9亿;注册方便;安全性较高;针对有国际收款、付款需求的企业和个人;在美国以及欧洲部分发达国家比较...
  • 、什么是个人免签收款接口? 个人免签收款接口是支持微信、支付宝。商户后台管理系统配置灵活、流水清晰,两种支付方式分开管理,交易流水一目了然,财务清晰。为支付需求客户提供快捷、灵活、标准的支付服务,有...
  • 官方政策出,许多商家不免担心起来,其实也不必过于恐慌,这对于智付呗数字经营系统的商家来说不会有什么影响,因为智付呗提供的本身就是符合政策要求的经营性“聚合二维码”。但商家使用智付呗数字经营系统的聚合...
  • 个人收款码不得用于经营收款

    万次阅读 2021-03-24 14:48:30
    在刷脸支付出现前,支付宝和微信一直在各自发展属于自己的领域,不管双方私底下...但充满火药味的设备名称只是开战前的个小小宣示,真正的开战信号是2019年支付宝微信宣布的补贴计划。2019年3月,支付宝宣布未来三
  • “2022年3月1日起个人收款码禁用于经营性服务”及“禁止个人静态收款条码被用于远程非面对面收款”的消息近日刷屏网络。这消息源自央行近期发布的条码支付监管新通知。 在消费者的日常生活中,扫支付等支付方式...
  • 至少配置个通用(即不设置固定金额的收款码)。固可选配置。 制作教程 1:打开微信手机APP 点击如图下右上角【+】号 点击【收付款】不同版本存在差异 但都在右上角+号进入 2:找到【二维码收款】进入 。...
  • 配置图示: 注册会员后进入商家后台,点击【免签通道】—【收款码】进入收款码配置页,点击右上...注意:至少配置个通用(即不设置固定金额和浮动收款码)。固配置查看固配置专题。 收款码制作教程 ...
  • 源支付是款专业的聚合免签收款系统,无需对接其他平台,个即可收款,灰常的方便快捷,集成实现三网免挂功能,无需挂繁琐的监控软件即可实现回调,更便捷的监控方式,更优的产品质量,更可靠的服务态度,值得您的选择!...
  • 绝非网络上面缺斤少两那种垃圾源码 云端已本地化,ck协议本地化,完全脱离云端控制,在已不受云端限制,修复监控了不在线BUG # 搭建教程 1.上传主机/服务器解压 2.访问 /Install安装 ... # 监控配置教程: ...
  • 个人收款程序开源

    2021-07-23 11:53:02
    、首先目前的现状是: 支付宝和微信早已不再支持个人接入即时到账收款接口! 二、解决措施: 使用我们的接口,您只需拥有支付宝、微信个人账户,就可以完成即时到账收款接口,并能实时通知到您的自定义网址。 ...
  • 只有企业资质才能申请支付宝和微信支付接口,我也看了下市面上的 一些个人收款码的方案,来实现自动收款,感觉这样做有很大的风险,用个人码收款也会让人感觉项目网站不太正规我当时也手准备申请个营业执照了,...
  • 聚合收款码集成了微信、支付宝、花呗、信用卡、云闪付、翼支付等多种支付方式,为商家提供统一管理后台。小微商户、个体户、企业都能用,没有限制,只要是真实经营的都行。身份证正反面、银行卡照片、门店照片、营业...
  • 纸业ERP-博思纸品管理系统 V2.0 Fot Win7x86.docx
  • 无卡支付 二维码聚成刷,支持所有主流支付通道 包括(支付宝 微信支付百度钱包 翼支付 银联 信用卡支付)费率低 分润点高 2.广告投放技术 (1)朋友圈广告病毒式扩散 微信无需好友 通过数据精准测试有效...
  • 主要介绍了Java将微信和支付宝支付的个二维码合二为一的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 在信息化的今天,很多情况下都需要输入密码。由于输入方式和装置采用按键的限制,密码输入方式变为开放式,对密码的安全性构成威胁。此领域的专利虽然很多,但多是遮挡式和隐蔽式的,输入完整的密码依然会存在安全...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,260
精华内容 904
关键字:

一码通收款