Giter VIP home page Giter VIP logo

javen205 / ijpay Goto Github PK

View Code? Open in Web Editor NEW
5.2K 187.0 1.3K 24.76 MB

IJPay 让支付触手可及,封装了微信支付、QQ支付、支付宝支付、京东支付、银联支付、PayPal 支付等常用的支付方式以及各种常用的接口。不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。右上角点下小星星✨

Home Page: http://javen205.gitee.io/ijpay

License: Apache License 2.0

Java 72.43% Shell 0.30% CSS 11.58% HTML 14.85% JavaScript 0.64% Batchfile 0.11% Vue 0.05% Stylus 0.04%
ijpay alipay wxpay weixin payment pay jpay

ijpay's Introduction

IJPay 让支付触手可及

特别说明:

  • 不依赖任何第三方 MVC 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。
  • 微信支付支持多商户多应用,普通商户模式与服务商商模式当然也支持境外商户、同时支持 Api-v3 与 Api-v2 版本的接口。
  • 支付宝支付支持多商户多应用,签名同时支持普通公钥方式与公钥证书方式

Stargazers over time

Gitee:http://gitee.com/Javen205/IJPay

GitHub:https://github.com/Javen205/IJPay

JavaDoc 文档:https://apidoc.gitee.com/javen205/IJPay

  • IJPay 是 JPay 后台接口 SDK 不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。
  • JPay 是简易而不简单的 Android 支付 SDK,JPay 是对微信 App 支付、支付宝 App 支付的二次封装,对外提供一个相对简单的接口以及支付结果的回调。
  • IOS 支付 SDK,敬请关注。

赞助商与活动推广

jetbrains

微信个人商户

了解更多戳→ 提供稳定异步通知,最低费率 0.38%

接入文档

IJPay 让支付触手可及

效果图&示例

请参考 Demo,目前 IJPay Demo 提供两个版本 JFinal 版本以及 Spring Boot 版本

1.x 版本 Demo :

Gitee-IJPay-Demo GitHub-IJPay-Demo

2.x 版本 Demo :

Gitee-JFinal-Demo GitHub-JFinal-Demo

Gitee-Solon-Demo GitHub-Solon-Demo

Gitee-SpringBoot-Demo GitHub-SpringBoot-Demo

联系方式

Email

贡献代码

最后如果该库对你有帮助不妨右上角点点 Star 或者任意赞助支持,我更喜欢你 Fork PR 成为项目贡献者 .

前往赞助

鸣谢

排名不分先后

开源推荐

官方文档

ijpay's People

Contributors

cena009 avatar duyang0128 avatar ghnk211 avatar ghostsf avatar gumusu avatar javen205 avatar lltx avatar maritimusj avatar mrhandsom avatar noear avatar q3224536684 avatar selfcoders avatar tomorrowduq avatar yungouos avatar zarvin avatar zzsoszz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ijpay's Issues

代码风格

需求描述

描述越详细越好

是否考虑去掉拦截器和下划线的风格样式,如果是转换XML 可以考虑使用 @element 注解

即时到账交易接口

即时到账交易接口

  • 支付宝网页即时到账功能

-文档地址

交流群

  • IJPay 让支付触手可及交流群:723992875
  • TNW 微信公众号开发脚手架交流群:114196246

savePlatformCert方法在保存完证书文件应该调用flush

版本信息

  • IJPay 版本:
  • 开发环境:
  • 支付方式:
  • 调用的接口:

报错信息 (注意格式化)

image

问题描述(包括回显步骤、截图 )

此项没有详细描述将直接关闭不给予解决

预期效果描述

交流群

  • IJPay 让支付触手可及交流群:723992875
  • TNWX 微信系开发脚手架交流群:114196246

建议读取证书文件的方式调整下

需求描述

打包后读取不到证书信息
描述越详细越好

  • 支付平台官方文档
  • 是否支持沙箱环境
  • 最好能提供测试账号(可以私信)

交流群

  • IJPay 让支付触手可及交流群:723992875
  • TNWX 微信系开发脚手架交流群:114196246

SDKUtil signByCertInfo方法不支持5.1.0版本号,代码逻辑bug

if ("01".equals(signMethod) || "1.0.0".equals(version) || "5.0.1".equals(version)) {
if ("5.0.0".equals(version) || "1.0.0".equals(version) || "5.0.1".equals(version)) {
}
if ("5.1.0".equals(version)) {
}
}
上述代码,5.1.0版本无法进行签名操作,直接return false 了

请求帮忙

这个好像是安卓项目吧?我想把你的接口用到我的web项目里面。能加个好友聊聊吗?

微信沙箱环境地址更改

版本信息

  • IJPay 版本:2.8.4
  • 开发环境:jdk 1.8.0_251
  • 支付方式:微信支付

报错信息

<title>404 Not Found</title>

404 Not Found


nginx/1.8.1

### 问题描述

微信官方的沙箱环境URL已经改了,导致代码调用沙箱环境,微信返回404

[微信支付文档](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=23_1&index=2)

微信支付v3版本的商家转账到零钱demo

微信支付v3版本的商家转账到零钱

微信支付v3版本的商家转账到零钱的demo没有,建议更新下,微信提现现在都更新到v3了

  • 支付平台官方文档
  • 是否支持沙箱环境
  • 最好能提供测试账号(可以私信)

交流群

  • IJPay 让支付触手可及交流群:723992875、864988890
  • TNWX 微信系开发脚手架交流群:114196246

请问支付宝app支付quit_url怎么赋值?

请问支付宝app支付quit_url怎么赋值?我看着阿里的sdk中AlipayTradeAppPayModel类里面貌似没有这个参数,而这个参数是必传的。麻烦解答一下,谢谢!
image

项目启动后,首次调用接口时报错,获取不到配置信息

版本信息

  • IJPay 版本: 2.9.4

报错信息 (注意格式化)

项目首次启动后,首次调用接口时,获取不到配置信息

这里粘贴代码或者日志

经排查,AliPayApiConfigKit.class 中的 setThreadLocalAliPayApiConfig 方法中调用的 putApiConfig 方法,首次调用返回值为null
IJPay获取配置bug

map的put方法返回值为该key对应的旧的value,所以首次put该key时返回的为null

解决方法:调整源码putApiConfig方法返回值 或者 使用 AliPayApiConfigKit 中的getAliPayApiConfig 方法获取配置而不是直接使用setThreadLocalAliPayApiConfig的返回值

微信支付证书问题

报错

500 运行时异常:java.io.FileNotFoundException: ac.p12 (No such file or directory)

使用接口

http://{domain}/platform/wxPay/transfer?openId=xxxxxx

后端运行环境

Linux->Docker->Tomcat: webapps/platform.war

证书文件

Linux->Docker->Nginx: location /ac.p12{ alias /usr/share/nginx/html/ac.p12 }
可通过http://{domain}/ac.p12访问

后端配置wxpay.properties

wxpay.certPath=ac.p12

证书文件换成/platform/ac.p12,可通过http://{domain}/platform/ac.p12访问,也出现了一样的报错

微信支付v3版本支付问题,不知道是不是还没更新代码

版本信息

报错信息 (注意格式化)

description 为必传参数,而UnifiedOrderModel类里面缺乏最新的V3 api参数,

问题描述(包括回显步骤、截图 )

image
Uploading image.png…

预期效果描述

交流群

  • IJPay 让支付触手可及交流群:723992875
  • TNWX 微信系开发脚手架交流群:114196246

支付宝沙箱环境退款问题

版本信息

  • IJPay 版本: 2.3.2
  • 开发环境:spring-boot
  • 支付方式:支付宝
  • 调用的接口:alipay.trade.refund

报错信息 (注意格式化)

ErrorScene^_^40002^_^isv.invalid-signature^_^null^_^Linux^_^2020-01-02 11:15:28^_^ProtocalMustParams:charset=UTF-8&alipay_root_cert_sn=6bc29aa3b4d406c43483ffea81e08d22&method=alipay.trade.refund&sign=TlZLnmzEUUI2VsVmicQzKyOf43irJdJmFdQogG1yXsUfFo/3YgTcVuzFQJ6dVYQjTuKklZTTJeC9xkYobrbRHX0l4WJfJMAjBN/M8I9tK1GR3rgePkHbXT1kVjgc3RmvzevRpTlBLNLZfPlAlBf0zxh6gHx8TD2Llbwywa/kcIfRqLJ1Mvq+gsuvwOEi3pNUGtB6x+6u8HrHc2MLToqtxPmrI0qwA5/ELFh8GFQjtJVxaeVUvWBsaamYfrlgtD5QYpBkt1BTfI4jhhggV0Toe4+eOwymnYHxZhKgYUloQvqog0b/HJqNOk1wCT9uym272pddPRYeBPKoVT7CDYN1sg==&version=1.0&app_id=2016101600701548&sign_type=RSA2&timestamp=2020-01-02 11:15:28^_^ProtocalOptParams:alipay_sdk=alipay-sdk-java-4.8.10.ALL&format=json^_^ApplicationParams:biz_content={"out_request_no":"1000001343333972","out_trade_no":"1000001255630963","refund_amount":"40.00"}^_^Body:{"alipay_trade_refund_response":{"code":"40002","msg":"Invalid Arguments","sub_code":"isv.invalid-signature","sub_msg":"验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配,网关生成的验签字符串为:alipay_root_cert_sn=6bc29aa3b4d406c43483ffea81e08d22&amp;alipay_sdk=alipay-sdk-java-4.8.10.ALL&amp;app_id=2016101600701548&amp;biz_content={&quot;out_request_no&quot;:&quot;1000001343333972&quot;,&quot;out_trade_no&quot;:&quot;1000001255630963&quot;,&quot;refund_amount&quot;:&quot;40.00&quot;}&amp;charset=UTF-8&amp;format=json&amp;method=alipay.trade.refund&amp;sign_type=RSA2&amp;timestamp=2020-01-02 11:15:28&amp;version=1.0"},"sign":"iuwK5e3csEOTrxG5Cy1uGWtBd99uvRKJ5IYMx4rFyQ9DVlBpDIxLNxbikQzd9/iNkUSY+zTtWLJXJ9TkJglgB3Tuemk1U7Nz98HjqvP2OL+XoTBZg2qdRhrvhCu537v0HbyPffAHcmRkfGQeMAjhIGsq8f7MH+LO4HLFsqLMCEUPnnoRe+N2wJYy2GFoTnEmaWS/bEj8y7rSJuirzlFuPUFkk8J5jQnB2ECFbvr2W5D8168fhD+D2wlmzxxlWo8mA+d0ZCZyDXXaX0Vs8r+JL8l3ZBayI7vU+0jKP8Ux5L+qaw9uskOrR3LBy4XEFf2BNt4d4vvtvuvFKgif/Ygf5A=="}^_^10ms,297ms,0ms

问题描述(包括回显步骤、截图 )

使用支付宝支付成功后,调用退款接口,提示验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配,网关生成的验签字符串。使用官方提供的支付宝开放平台开发助手做验签时的确时不匹配的。系统生成的验签字符串跟支付宝的不匹配

预期效果描述

交流群

  • IJPay 让支付触手可及交流群:723992875
  • TNW 微信公众号开发脚手架交流群:114196246

有实现多商户吗

需求描述

描述越详细越好

  • 支付平台官方文档
  • 是否支持沙箱环境
  • 最好能提供测试账号(可以私信)

交流群

  • IJPay 让支付触手可及交流群:723992875
  • TNWX 微信系开发脚手架交流群:114196246

获取微信支付公钥返回404

版本信息

  • IJPay 版本: 2.6.3
  • 开发环境:
  • 支付方式: wxPay
  • 调用的接口: WxPayApi.getPublicKey

报错信息 (注意格式化)

微信用了新的url,WxDomain 添加了
FRAUD("https://fraud.mch.weixin.qq.com");
但是调用时没使用。
public static String getPublicKey(Map<String, String> params, String certPath, String certPass) {
return execution(getReqUrl(WxApiType.GET_PUBLIC_KEY, (WxDomain)null, false), params, certPath, certPass);
}


这里粘贴代码或者日志

问题描述(包括回显步骤、截图 )

此项没有详细描述将直接关闭不给予解决

预期效果描述

交流群

  • IJPay 让支付触手可及交流群:723992875
  • TNWX 微信系开发脚手架交流群:114196246

Spring-Boot-Demo使用异常,另写Controller无法获取APPID配置信息

需求描述

版本信息:

    <groupId>com.ijpay.demo</groupId>
    <artifactId>IJPay-Demo-SpringBoot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>${project.artifactId}</name>
    <description>IJPay Demo for Spring Boot</description>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>

        <ijapy.version>2.3.0</ijapy.version>
        <enjoy.version>4.3</enjoy.version>
    </properties>
  • 使用com.ijpay.demo.controller.wxpay包内WxPayController调用scanCode2正常
  • 新建包com.ijpay.demo.business.controller,添加类ArtistController之后复制WxPayController的getApiConfig和scanCode2方法,结果无法正常使用scanCode2微信收款功能,异常如下:
2019-11-14 15:20:31.162  INFO 15056 --- [p-nio-80-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2019-11-14 15:20:31.162  INFO 15056 --- [p-nio-80-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2019-11-14 15:20:31.166  INFO 15056 --- [p-nio-80-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 4 ms
2019-11-14 15:20:31.964 ERROR 15056 --- [p-nio-80-exec-7] c.ijpay.demo.controller.IndexController  : 欢迎使用 IJPay -By Javen  交流群:723992875
2019-11-14 15:20:42.954 ERROR 15056 --- [p-nio-80-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause

java.lang.NullPointerException: null
	at com.ijpay.wxpay.WxPayApiConfigKit.getAppId(WxPayApiConfigKit.java:70) ~[IJPay-All-2.3.0.jar:na]
	at com.ijpay.wxpay.WxPayApiConfigKit.getWxPayApiConfig(WxPayApiConfigKit.java:76) ~[IJPay-All-2.3.0.jar:na]
	at com.ijpay.demo.business.controller.ArtistController.scanCode2(ArtistController.java:354) ~[classes/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_201]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_201]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_201]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_201]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.1.8.RELEASE.jar:5.1.8.RELEASE]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.1.8.RELEASE.jar:5.1.8.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) ~[spring-webmvc-5.1.8.RELEASE.jar:5.1.8.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892) ~[spring-webmvc-5.1.8.RELEASE.jar:5.1.8.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) ~[spring-webmvc-5.1.8.RELEASE.jar:5.1.8.RELEASE]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.1.8.RELEASE.jar:5.1.8.RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039) ~[spring-webmvc-5.1.8.RELEASE.jar:5.1.8.RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) ~[spring-webmvc-5.1.8.RELEASE.jar:5.1.8.RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) ~[spring-webmvc-5.1.8.RELEASE.jar:5.1.8.RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897) ~[spring-webmvc-5.1.8.RELEASE.jar:5.1.8.RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) ~[tomcat-embed-core-9.0.21.jar:9.0.21]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) ~[spring-webmvc-5.1.8.RELEASE.jar:5.1.8.RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.21.jar:9.0.21]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.21.jar:9.0.21]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.21.jar:9.0.21]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.21.jar:9.0.21]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.21.jar:9.0.21]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.21.jar:9.0.21]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) ~[spring-web-5.1.8.RELEASE.jar:5.1.8.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:109) ~[spring-web-5.1.8.RELEASE.jar:5.1.8.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.21.jar:9.0.21]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.21.jar:9.0.21]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.21.jar:9.0.21]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-9.0.21.jar:9.0.21]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) [tomcat-embed-core-9.0.21.jar:9.0.21]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [tomcat-embed-core-9.0.21.jar:9.0.21]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.21.jar:9.0.21]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [tomcat-embed-core-9.0.21.jar:9.0.21]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.21.jar:9.0.21]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) [tomcat-embed-core-9.0.21.jar:9.0.21]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-9.0.21.jar:9.0.21]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:853) [tomcat-embed-core-9.0.21.jar:9.0.21]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587) [tomcat-embed-core-9.0.21.jar:9.0.21]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.21.jar:9.0.21]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_201]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_201]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.21.jar:9.0.21]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_201]

附代码:

package com.ijpay.demo.business.controller;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.ijpay.core.enums.SignType;
import com.ijpay.core.enums.TradeType;
import com.ijpay.core.kit.IpKit;
import com.ijpay.core.kit.QrCodeKit;
import com.ijpay.core.kit.WxPayKit;
import com.ijpay.demo.controller.wxpay.AbstractWxPayApiController;
import com.ijpay.demo.entity.WxPayBean;
import com.ijpay.demo.vo.AjaxResult;
import com.ijpay.wxpay.WxPayApi;
import com.ijpay.wxpay.WxPayApiConfig;
import com.ijpay.wxpay.WxPayApiConfigKit;
import com.ijpay.wxpay.model.UnifiedOrderModel;
import com.jfinal.kit.StrKit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.Map;

@Controller
@RequestMapping("/tryPay")
public class ArtistController extends AbstractWxPayApiController {
	private Logger log = LoggerFactory.getLogger(this.getClass());

	@Autowired
	WxPayBean wxPayBean;

	private String notifyUrl;
	private static final String USER_PAYING = "USERPAYING";

	@Override
	public WxPayApiConfig getApiConfig() {
		WxPayApiConfig apiConfig;

		try {
			apiConfig = WxPayApiConfigKit.getApiConfig(wxPayBean.getAppId());
		} catch (Exception e) {
			apiConfig = WxPayApiConfig.builder()
				.appId(wxPayBean.getAppId())
				.mchId(wxPayBean.getMchId())
				.partnerKey(wxPayBean.getPartnerKey())
				.certPath(wxPayBean.getCertPath())
				.domain(wxPayBean.getDomain())
				.build();
		}
		notifyUrl = apiConfig.getDomain().concat("/wxPay/payNotify");
		return apiConfig;
	}

	@RequestMapping(value = "/scanCode2", method = {RequestMethod.POST, RequestMethod.GET})
	@ResponseBody
	public AjaxResult scanCode2(HttpServletRequest request, HttpServletResponse response,
								@RequestParam("total_fee") String totalFee) {

		if (StrKit.isBlank(totalFee)) {
			return new AjaxResult().addError("支付金额不能为空");
		}

		String ip = IpKit.getRealIp(request);
		if (StrKit.isBlank(ip)) {
			ip = "127.0.0.1";
		}
		WxPayApiConfig wxPayApiConfig = WxPayApiConfigKit.getWxPayApiConfig();

		Map<String, String> params = UnifiedOrderModel
			.builder()
			.appid(wxPayApiConfig.getAppId())
			.mch_id(wxPayApiConfig.getMchId())
			.nonce_str(WxPayKit.generateStr())
			.body("IJPay 让支付触手可及-扫码支付模式二")
			.attach("Node.js 版:https://gitee.com/javen205/TNW")
			.out_trade_no(WxPayKit.generateStr())
			.total_fee("1")
			.spbill_create_ip(ip)
			.notify_url(notifyUrl)
			.trade_type(TradeType.NATIVE.getTradeType())
			.build()
			.createSign(wxPayApiConfig.getPartnerKey(), SignType.HMACSHA256);

		String xmlResult = WxPayApi.pushOrder(false, params);
		log.info("统一下单:" + xmlResult);

		Map<String, String> result = WxPayKit.xmlToMap(xmlResult);

		String returnCode = result.get("return_code");
		String returnMsg = result.get("return_msg");
		System.out.println(returnMsg);
		if (!WxPayKit.codeIsOk(returnCode)) {
			return new AjaxResult().addError("error:" + returnMsg);
		}
		String resultCode = result.get("result_code");
		if (!WxPayKit.codeIsOk(resultCode)) {
			return new AjaxResult().addError("error:" + returnMsg);
		}
		//生成预付订单success

		String qrCodeUrl = result.get("code_url");
		String name = "payQRCode2.png";

		Boolean encode = QrCodeKit.encode(qrCodeUrl, BarcodeFormat.QR_CODE, 3, ErrorCorrectionLevel.H, "png", 200, 200,
			request.getSession().getServletContext().getRealPath("/") + File.separator + name);
		if (encode) {
			//在页面上显示
			return new AjaxResult().success(name);
		}
		return null;
	}
}

请问是少用了什么配置或者拦截所导致的这个情况?还是说只能在指定的包目录下进行操作?

可以支持苹果的IAP吗

需求描述

你好,请问可以支持苹果内购吗?
像苹果的消耗型内购买,非消耗型内购买,以及自动订阅

交流群

  • IJPay 让支付触手可及交流群:723992875
  • TNWX 微信系开发脚手架交流群:114196246

是否可以集成到springmvc项目

需求描述

描述越详细越好

  • 支付平台官方文档
  • 是否支持沙箱环境
  • 最好能提供测试账号(可以私信)

交流群

  • IJPay 让支付触手可及交流群:723992875
  • TNWX 微信系开发脚手架交流群:114196246

微信支付异步通知时校验:verifyNotify 方法的 SignType 参数没有使用,代码仍然使用 SignType.MD5

版本信息

  • IJPay 版本: 2.8.3
  • 开发环境: windows
  • 支付方式: 微信支付
  • 调用的接口: 支付结果通知 v2

报错信息 (注意格式化)


public static boolean verifyNotify(Map<String, String> params, String partnerKey, SignType signType) {
        return verifyNotify(params, partnerKey, SignType.MD5, null);
}

问题描述(包括回显步骤、截图 )

verifyNotify 方法的 SignType 参数没有使用,代码仍然使用 SignType.MD5,如果使用其他加密方式,没有合适的方法调用,只能重新实现一下verifyNotify()的逻辑

预期效果描述

使得verifyNotify(Map<String, String> params, String partnerKey, SignType signType) 中的SignType 参数在代码中正常使用

交流群

  • IJPay 让支付触手可及交流群:723992875
  • TNWX 微信系开发脚手架交流群:114196246

微信支付v3版退款接口

需求描述

想咨询下微信支付v3版退款接口以后会更新上去吗?

  • 支付平台官方文档
  • 是否支持沙箱环境
  • 最好能提供测试账号(可以私信)

交流群

  • IJPay 让支付触手可及交流群:723992875
  • TNWX 微信系开发脚手架交流群:114196246

自动更新微信证书

需求描述

描述越详细越好

  • 支付平台官方文档
  • 是否支持沙箱环境
  • 最好能提供测试账号(可以私信)

交流群

  • IJPay 让支付触手可及交流群:723992875
  • TNWX 微信系开发脚手架交流群:114196246

请问微信V3实现了官方的自动更新微信证书功能吗?如果没有实现,希望有一个自动更新的例子。

支付宝服务商模式使用证书代商户支付后退款,提示“检测到证书相关参数已初始化,证书模式下请改为调用certificateExecute”

版本信息

  • IJPay 版本:2.6.2
  • 开发环境:支付宝证书模式
  • 支付方式:支付宝退款
  • 调用的接口:统一收单退款接口

报错信息 (注意格式化)


public static AlipayTradeRefundResponse tradeRefundToResponse(AlipayTradeRefundModel model, String appAuthToken) throws AlipayApiException {
        AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
        request.setBizModel(model);
        return execute(request, null, appAuthToken);
    }


问题描述(包括回显步骤、截图 )

支付宝服务商模式代商户支付后退款,提示“检测到证书相关参数已初始化,证书模式下请改为调用certificateExecute”

预期效果描述

能够调起支付宝退款接口,并且退款成功

交流群

  • IJPay 让支付触手可及交流群:723992875
  • TNWX 微信系开发脚手架交流群:114196246

开源协议

请问个人或者企业想使用该项目是否遵循开源协议,或者未来会不会添加开源协议?

[Request] Official SDK download for UnionPay

Hi Javen,

Could you give me the source of the official SDK of UnionPay for 5.1.0?

Currently, I'm using com.unionpay.acp:1.0.0 but the signing method doesn't have support for SHA 256 encryption.

Thanks and regards,
Nick

关于iOS的SDK

请教一下大神,你们什么时候发布iOS的SDK呢?

Caused by: java.lang.UnsupportedOperationException: clientBuilder.sslSocketFactory(SSLSocketFactory) not supported on JDK 9+

版本信息

  • IJPay 版本: 1.2.0
  • 开发环境: 1.8.0_261
  • 支付方式: 微信
  • 调用的接口:orderRefund

报错信息 (注意格式化)

	at com.jpay.util.HttpUtils$OkHttp3Delegate.postSSL(HttpUtils.java:411)
	at com.jpay.util.HttpUtils.postSSL(HttpUtils.java:50)
	at com.jpay.weixin.api.WxPayApi.doPostSSL(WxPayApi.java:663)
	at com.jpay.weixin.api.WxPayApi.orderRefund(WxPayApi.java:209)


Caused by: java.lang.UnsupportedOperationException: clientBuilder.sslSocketFactory(SSLSocketFactory) not supported on JDK 9+
	at okhttp3.internal.platform.Jdk9Platform.trustManager(Jdk9Platform.kt:61)
	at okhttp3.OkHttpClient$Builder.sslSocketFactory(OkHttpClient.kt:751)
	at com.jpay.util.HttpUtils$OkHttp3Delegate.postSSL(HttpUtils.java:402)
	... 134 common frames omitted


### 问题描述(包括回显步骤、截图 )

此项没有详细描述将直接关闭不给予解决
![image](https://user-images.githubusercontent.com/25632537/109273992-e7b2c600-784d-11eb-84b5-2950ea41a5a2.png)


### 预期效果描述 


### 交流群

- IJPay 让支付触手可及交流群:723992875
- TNWX 微信系开发脚手架交流群:114196246

WxPayApiConfig 找不到

版本信息

  • IJPay 版本:2.1.1
  • 开发环境:
  • 支付方式:微信小程序支付

报错信息 (注意格式化)

这里粘贴代码或者日志
https://javen205.gitee.io/ijpay/doc/IJPay-Demo.html
文档里面的

问题描述(包括回显步骤、截图 )

1、配置支付参数(属性文件或者数据库读取)
2、IJPay微信支付初始化(主要设置通用参数,后面请求接口时不用每次重复设置)
WxPayApiConfig apiConfig = WxPayApiConfig.New()
.setAppId(appid)
.setMchId(mch_id)
.setPaternerKey(partnerKey)
.setPayModel(PayModel.BUSINESSMODEL);//PayModel.BUSINESSMODEL:普通商户模式 PayModel.SERVICEMODE:服务商模式
WxPayApiConfigKit.setThreadLocalWxPayApiConfig(apiConfig);
更多参数设置请参考 WxPayApiConfig.java

当然支付接口中也不用每次都设置WxPayApiConfig,可以通过WxPayApiConfigKit.getApiConfig(String appId)获取WxPayApiConfig

WxPayApiConfigKit wxPayApiConfig =WxPayApiConfigKit.getApiConfig(appId);
WxPayApiConfig 找不到

预期效果描述

WxPayApiConfig apiConfig = WxPayApiConfig.New()
.setAppId(appid)
.setMchId(mch_id)
.setPaternerKey(partnerKey)
.setPayModel(PayModel.BUSINESSMODEL);//PayModel.BUSINESSMODEL:普通商户模式 PayModel.SERVICEMODE:服务商模式
WxPayApiConfigKit.setThreadLocalWxPayApiConfig(apiConfig);

交流群

  • IJPay 让支付触手可及交流群:723992875
  • TNW 微信公众号开发脚手架交流群:114196246

WxPayApi.getPublicKey 请求路径错误

版本信息

  • IJPay 版本:2.7.3
  • 开发环境: Mac
  • 支付方式: 付款到银行卡
  • 调用的接口: WxPayApi.getPublicKey

报错信息 (注意格式化)

请求 404


问题描述(包括回显步骤、截图 )

调用此接口发现 请求的路径为https://api.mch.weixin.qq.com/risk/getpublickey

实际上官方文档的路径为 https://fraud.mch.weixin.qq.com/risk/getpublickey 导致请求404 publickey获取失败

预期效果描述

更换请求路径

交流群

  • IJPay 让支付触手可及交流群:723992875
  • TNWX 微信系开发脚手架交流群:114196246

spring boot 读取不到dev下的properties配置文件,请问是什么原因呢?

版本信息

  • IJPay 版本:
com.github.javen205 IJPay-All 2.6.3

报错信息 (注意格式化)

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [cn.zhr.service.pay.ServicePayApplication]; nested exception is java.io.FileNotFoundException: class path resource [alipay.properties] cannot be opened because it does not exist
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:188) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:319) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:236) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:280) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:96) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:707) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:533) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) ~[spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) [spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) [spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) [spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.3.2.RELEASE.jar:2.3.2.RELEASE]
at cn.zhr.service.pay.ServicePayApplication.main(ServicePayApplication.java:10) [classes/:na]
Caused by: java.io.FileNotFoundException: class path resource [alipay.properties] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:180) ~[spring-core-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.core.io.support.EncodedResource.getInputStream(EncodedResource.java:159) ~[spring-core-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.core.io.support.PropertiesLoaderUtils.fillProperties(PropertiesLoaderUtils.java:99) ~[spring-core-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.core.io.support.PropertiesLoaderUtils.fillProperties(PropertiesLoaderUtils.java:73) ~[spring-core-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.core.io.support.PropertiesLoaderUtils.loadProperties(PropertiesLoaderUtils.java:59) ~[spring-core-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.core.io.support.ResourcePropertySource.(ResourcePropertySource.java:67) ~[spring-core-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.core.io.support.DefaultPropertySourceFactory.createPropertySource(DefaultPropertySourceFactory.java:37) ~[spring-core-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.context.annotation.ConfigurationClassParser.processPropertySource(ConfigurationClassParser.java:462) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:279) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:249) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:198) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:303) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:249) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:206) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:174) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
... 14 common frames omitted

这里粘贴代码或者日志


### 问题描述(包括回显步骤、截图 )

照着spring boot demo配的,但是读取不到dev下的配置文件,请问是什么原因呢?


### 预期效果描述 
读取到配置文件

支付宝不支持公钥证书加签

需求描述

我看实体 com.ijpay.entity.AliPayBean 里面并没有配置 支付宝公钥证书 支付宝根证书 以及 应用公钥证书 的配置项,是项目不支持吗?

交流群

  • IJPay 让支付触手可及交流群:723992875
  • TNW 微信公众号开发脚手架交流群:114196246

支付宝多应用切换,通过appid初始化参数,存在参数被覆盖的情况

需求描述

系统中存在多个支付宝商户,且是同一个服务商下同一个应用授权,他们的授权应用appid是一样的,不同的是应用授权token不一样,在这种场景下通过AliPayApiConfigKit.setThreadLocalAliPayApiConfig(aliPayApiConfig)方式设置的支付参数,由于appid是一样的,缓存中支付参数的map会被后面做初始化动作的参数覆盖

描述越详细越好

  • 支付平台官方文档
  • 是否支持沙箱环境
  • 最好能提供测试账号(可以私信)

交流群

  • IJPay 让支付触手可及交流群:723992875
  • TNWX 微信系开发脚手架交流群:114196246

可以去掉多余的打印吗?

版本信息

  • IJPay 版本: 2.9.6-17
  • 开发环境:
  • 支付方式:
  • 调用的接口:

报错信息 (注意格式化)


这里粘贴代码或者日志

问题描述(包括回显步骤、截图 )

com/ijpay/core/kit/WxPayKit.java:744 这一行写死了打印

image

预期效果描述

去掉打印标准输出

交流群

  • IJPay 让支付触手可及交流群:723992875、864988890
  • TNWX 微信系开发脚手架交流群:114196246

在windows上运行时,加密有些问题

src/main/java/com/jpay/secure/RSAUtils.java中的方法 public static String encryptByPublicKey(String data,String publicKey,String fillMode)在windows的cmd中运行,默认是GBK2312,这样加密出来会有问题
byte[] dataByte = data.getBytes();
应该改为
data.getBytes("UTF-8");
@Javen205

微信下单分账标记参数问题

版本信息

  • IJPay 版本:
  • 开发环境:
  • 支付方式:
  • 调用的接口:

报错信息 (注意格式化)


这里粘贴代码或者日志

```  private int subsidy_amount; 文档中不存在这个参数


### 问题描述(包括回显步骤、截图 )

此项没有详细描述将直接关闭不给予解决
![image](https://user-images.githubusercontent.com/52090251/129535865-d18bf736-26f0-48c7-af5e-6b67303fdbe6.png)


### 预期效果描述 
这个参数需要去除

### 交流群

- IJPay 让支付触手可及交流群:723992875
- TNWX 微信系开发脚手架交流群:114196246

WX-V3-补差API-URL错误

版本信息

问题描述(包括回显步骤、截图 )

CREATE_SUBSIDIES("v3/ecommerce/subsidies/create"),

CREATE_SUBSIDIES("/v3/ecommerce/subsidies/create"),

微信查询订单时报签名错误,但是去官方校验签名是通过的

版本信息

  • IJPay 版本:
  • 开发环境:
  • 支付方式:
  • 调用的接口:

报错信息 (注意格式化)

见截图
这里粘贴代码或者日志
Map<String, String> params = OrderQueryModel.builder()
.appid(wxPayConfig.getAppID())
.mch_id(wxPayConfig.getMchID())
.out_trade_no(accountOrders.getOrderNum())
.nonce_str(WxPayKit.generateStr())
.build()
.createSign(wxPayConfig.getKey(), SignType.MD5);
log.info("请求参数:{}", WxPayKit.toXml(params));
String resultString = WxPayApi.orderQuery(params);
log.info("订单查询响应: {}", resultString);

问题描述(包括回显步骤、截图 )

Uploading image.png…

预期效果描述

交流群

  • IJPay 让支付触手可及交流群:723992875
  • TNWX 微信系开发脚手架交流群:114196246

v3接口在Spring Boot Jar包模式下无法读取证书

版本信息

  • IJPay 版本: 2.7.5
  • 开发环境: Linux
  • 支付方式: 微信支付

报错信息 (注意格式化)

IJPayHttpResponse response = WxPayApi.v3(
                    RequestMethod.POST,
                    WxDomain.CHINA.toString(),
                    WxApiType.JS_API_PAY.toString(),
                    wechatPaymentPlatform.getMchId(),
                    getSerialNumber(wechatPaymentPlatform),
                    null,
                    wechatPaymentPlatform.getApiClientKeyPath(),
                    JSONUtil.toJsonStr(unifiedOrderModel)

cn.hutool.core.io.IORuntimeException: File not exist: /home/web/payment/target/payment-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/config/v3-dev/apiclient_key.pem
	at cn.hutool.core.io.file.FileReader.checkFile(FileReader.java:300)
	at cn.hutool.core.io.file.FileReader.<init>(FileReader.java:57)
	at cn.hutool.core.io.file.FileReader.create(FileReader.java:37)
	at cn.hutool.core.io.FileUtil.readString(FileUtil.java:1872)
	at cn.hutool.core.io.FileUtil.readString(FileUtil.java:1896)
	at cn.hutool.core.io.FileUtil.readUtf8String(FileUtil.java:1848)
	at com.ijpay.core.kit.PayKit.getPrivateKey(PayKit.java:413)
	at com.ijpay.core.kit.PayKit.createSign(PayKit.java:352)
	at com.ijpay.core.kit.WxPayKit.buildAuthorization(WxPayKit.java:444)
	at com.ijpay.wxpay.WxPayApi.v3(WxPayApi.java:253)
	at com.ijpay.wxpay.WxPayApi.v3(WxPayApi.java:337)


问题描述(包括回显步骤、截图 )

Spring Boot Jar包部署在Linux时无法正常读取证书,IDEA开发情况下是正常的。

预期效果描述

Linux也应该可以读取到证书。

交流群

  • IJPay 让支付触手可及交流群:723992875
  • TNWX 微信系开发脚手架交流群:114196246

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.