Ping++支付
第一次接触支付啊,有点小激动,所以写下这篇随笔以防以后忘记。
ping++的文档还有服务都是挺好的,当你注册之后,就会给你发邮件。截图如下:

是不是感觉服务很不错。
接下来直入正题。
首先,我们需要加入ping++的依赖jar包,在ping++官网上有三种方式,我选择的是maven安装。又因为我用的是idea的自带的maven,所以有点坑。我是把官网上的maven安装的远程仓库和依赖都放在pom.xml里,就会报错,报错的内容是要在header里面加上Authorize。我查了很多文档都没有找到解决办法,后来看了人家写的pom.xml才知道错在哪了,没加<distributionManagement>标签。这就是我修改过后的pom.xml文档:

ping++的支付,需要三个参数,apikey(分为test和live,既测试key和正式key),appid(ping++管理平台对应的应用Id),priavtekey(私钥)。这三个参数的获得,在注册ping++的时候会有介绍,按照介绍步骤一步步做就可以了。
再获得这三个参数之后,我们就可以创建charge了,程序如下:
@Controller
@RequestMapping("/open")
public class ChargeAction { @RequestMapping(value = "charge.do")
public Charge createCharge() { String apiKey = "sk_test_TCWX58HmvL041yrvDKnfjjX5";
Pingpp.apiKey = apiKey;
System.out.println(Pingpp.apiKey); //ping++管理平台 对应的应用ID
String appId="app_ijXnL8HeDeTSCKSm"; //这里你也可是使用官网demo里面的privatekeyFilePath 我这里是直接把privatekey拿来用了
Pingpp.privateKey = "-----BEGIN RSA PRIVATE KEY-----\n" +
"MIICXQIBAAKBgQClN/5msBTJ3Dzvll/93EqvY+V1idgU473mCerjvoa7ASpUi7ZB\n" +
"qGm7c7y70Rk2YehSJk7b7IQBWKKSicfMOsA/VFbsw4WSGDgODG5dWcFEqUuJGBA3\n" +
"NH0pP3Ix/fDmA66/h0p6wH7q+GqAZXj+TAHpjuEOy4Na9Z8VSY5TL7n8uwIDAQAB\n" +
"AoGAXahbN5zze+a0SGDnM4JQeBJZ/gJREq5zdNcEZ2wW9iVX+KtmetvcbB3UzGdh\n" +
"MnnX99GtfHAb+KNlLUqbj0NyvMp7hTYkncT5SV67OxOjmO55QFH0ypQhiC3C/1BM\n" +
"OeU3gdu2WXyNTJdeicOYExfNeIfeG4+UUwbS1AD+hhH++DECQQDR/XDDVJlWbfmL\n" +
"f7Y7jvYc3eJMQNghChI/8qKxa/5Ko8uHLplC0MdToMaj7wh26hmBPI/UyiHOu2y1\n" +
"Mb/fzGoDAkEAyWtJEPi5BRrtbQG928V/SWLx1eI1B2PRVH67ewyK0y8Go3XxMhw/\n" +
"DPnX1x87Gz6M67qCVCEK7y9h9sBt9eSA6QJAFsjgHmGkjas7I3bFCCtX6wPsVQfI\n" +
"K7WTC1tBaezk16Z0JAPbX1OV/S35v7nk+jomcE5o8NbJ2kud3P876YWdjwJBAKAM\n" +
"bCbcPMjduMPhmmfD63z47omyEckpe/DUM013jeh5eaDx2xKid0dsUCJUYrcnYPr/\n" +
"XQhUqUeeMw3LopS9WeECQQCo4svdagNWz9Uksl7zAnpCxPWS07Hr4Rd5LXwDiwe6\n" +
"HvhO2NGhHQFxZznfWk7LMBz+1NHwMtCdj3A5emkw4Uf1\n" +
"-----END RSA PRIVATE KEY-----\n"; Charge charge = null;
Map<String, Object> chargeMap = new HashMap<String, Object>();
chargeMap.put("amount", 100);//订单总金额, 人民币单位:分(如订单总金额为 1 元,此处请填 100)
chargeMap.put("currency", "cny");
chargeMap.put("subject", "电商");
chargeMap.put("body", "1234");
String orderNo = new Date().getTime()+"" ;
chargeMap.put("order_no", orderNo);// 推荐使用 8-20 位,要求数字或字母,不允许其他字符
chargeMap.put("channel", "alipay_pc_direct ");// 支付使用的第三方支付渠道取值,请参考:https://www.pingxx.com/api#api-c-new
chargeMap.put("client_ip", "127.0.0.1"); // 发起支付请求客户端的 IP 地址,格式为 IPV4,如: 127.0.0.1
Map<String, String> app = new HashMap<String, String>();
app.put("id", appId);
chargeMap.put("app", app); Map<String, String> extramap = new HashMap<String, String>();
//extra的参数根据文档: https://pingxx.com/document/api#api-c-new
extramap.put("success_url", "your success_url"); // extra 取值请查看相应方法说明
chargeMap.put("extra", extramap); try {
//发起交易请求
charge = Charge.create(chargeMap);
// 传到客户端请先转成字符串 .toString(), 调该方法,会自动转成正确的 JSON 字符串
String chargeString = charge.toString();
System.out.println(chargeString);
} catch (Exception e) {
e.printStackTrace();
}
return charge;
} 这里两个参数要注意一下,channel和extra 这两个参数是有对应关系的。具体的可以看下官方文档。这里我只是用了 alipay_pc_direct (支付宝网页支付)。
你可以用junit测试运行一下,生成的charge是json格式,我生成的就是下面的:
{
"id": "ch_90GC0CvD4O0004yrP44q5eHO",
"object": "charge",
"created": 1504859495,
"livemode": false,
"paid": false,
"refunded": false,
"reversed": false,
"app": "app_ijXnL8HeDeTSCKSm",
"channel": "alipay_pc_direct",
"order_no": "1504859505311",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "电商",
"body": "1234",
"time_paid": null,
"time_expire": 1504945895,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_90GC0CvD4O0004yrP44q5eHO/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"alipay_pc_direct": {
"_input_charset": "utf-8",
"body": "1234",
"it_b_pay": "1440m",
"notify_url": "https%3A%2F%2Fnotify.pingxx.com%2Fnotify%2Fcharges%2Fch_90GC0CvD4O0004yrP44q5eHO",
"out_trade_no": "1504859505311",
"partner": "2008769584892761",
"payment_type": "1",
"return_url": "http://127.0.0.1:9999/SpringRedis/testpay.jsp",
"seller_id": "2008769584892761",
"service": "create_direct_pay_by_user",
"subject": "电商",
"total_fee": "1",
"sign": "RzBHU0dHTEN5TDQ0aWpMVzlDR21uckhD",
"sign_type": "RSA"
}
},
"extra": {
"success_url": "http://127.0.0.1:9999/SpringRedis/testpay.jsp"
},
"description": null
}
生成charge对象之后,就代表你距离成功又近了一步。
接下来,我们就需要把charge传到前端,前端获取到charge对象那个,就可以调起支付控件了。
这其中就需要一个很重要的js。pingpp.js,这个官网里有,直接下载就可以了。对于这个js的使用,官方也有说明。
下面,我也只用了这个js来调起支付控件,完成支付。
然后我们可以写个页面请求到charge然后调用pingpp.js,页面代码如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html >
<head> <script type="text/javascript" src="./js/jquery-3.1.1.js"></script> //引入pingpp.js
<script type="text/javascript" src="./js/pingpp.js"></script> <script language="JavaScript"> function test() {
$.ajax({
url:'/SpringRedis/testpay.jsp',
method:'post',
success:function (data) {
alert(data);
if(data.errorMessage){
alert("支付连接失败");
}else{
pingpp.createPayment(data, function(result, error) {
if (result == "success") {
// 只有微信公众账号 wx_pub 支付成功的结果会在这里返回,其他的支付结果都会跳转到 extra 中对应的 URL。 } else if (result == "fail") {
// charge 不正确或者微信公众账号支付失败时会在此处返回 } else if (result == "cancel") {
// 微信公众账号支付取消支付 }
});
}
},
error:function ( msg) {
alert("支付连接失败" +msg);
}
})
}
</script>
</head>
<body>
<h2>Hello World! SpringRedis</h2>
<input id="test" type="button" value="测试" onclick="test()">
</body> </html>
在你点击测试按钮之后,如果出现如下页面,就代表你成功了。

在代码完成后,还需要配置webhook来接收到账通知。这个官网里说的都很详细。
Ping++支付的更多相关文章
- ios的Ping++支付接入步骤-b
1. Client 发送支付要素给 Server 2. Server 发送支付请求并将返回的支付凭据传给 Client 3. Client 调起支付控件完成支付 4. 渠道同步返回支付结果给 Clie ...
- iOS的Ping++支付接入步骤(详细)
Ping++ SDK 代码下载地址: https://github.com/CoderLeezhen/PingppDemo 参考链接: https://www.pingxx.com/guidance/ ...
- iOS银联,支付宝,微信,ping++开发文档
银联支付 银联支付目测只需两个参数 1.tn 其实就是订单号 2.mode 是测试环境还是线上环境 开发步骤 1.首先客户端浏览商品,点击下单,请求到达商户后台 2.商户后台在提交订单信息到银联后台 ...
- android支付
这里不讲具体的某个平台的支付使用,在工作中,公司使用到了ping++支付,使用它的好处是可以不用关心某个平台的支付了,例如:微信支付.支付宝支付等,太多的平台有个整合,是一个很好的事情,当然这也减轻了 ...
- Cordoval在iOS中的运用整理
一:关于Cordoval理论知识 1:PhoneGap是手机平台上流行的一款中间件.它构建在各种手机平台所提供的WebView(浏览器内核)组件的基础之上,使用javascript语言对应用开发者提供 ...
- 开发者:网站 & SDK
{ 收集的一些.开发工具 } Teambition 团队协作工具 GitCafe 代码托管 FIR.im App 托管平台 Coding 代码托管,项目管理,WebIDE 计蒜客 编程学习 SendC ...
- 第一个android ijkplayer播放器
创建一个ijkplayer的播放器项目,需要三步设置: 一.在activity_main.xml中添加播放器标签 <com.smallart.myapplication.media.IjkVid ...
- iOS Ping++前端集成支付
直接上代码 /* 获取订单charge 1.buyerId 买家ID 2.sellerId 卖家ID 3.liveId 直播间ID 4.goodCount 商品数量 5.status ...
- 微信支付开发+{ping++}微信支付托管
------------------------微信支付接口------------------------------- 微信支付开发并没有想象中的那么难,主要是微信提供了sdk. 微信公众号必须是 ...
随机推荐
- 20164318 毛瀚逸-----EXP5 MSF基础应用
1. 实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.1一个主动攻击实践,如ms08_067; (成功) 1.2 一个针对浏览器的攻击, ...
- Centos7.4下安装Jumpserver 1.0.0(支持windows组件)
0)系统环境CentOS 7.4 IP: 192.168.100.10 [root@jumpserver-server ~]# cat /etc/redhat-release CentOS Linux ...
- LeetCode - Backspace String Compare
Given two strings S and T, return if they are equal when both are typed into empty text editors. # m ...
- zabbix使用客户端和不使用客户端监控指定端口
监控指定端口也很简单,以监控181主机的22端口为例 点击已成功监控的181主机的监控项 点击创建监控项 使用客户端监控端口:选择键值net.tcp.listen[port],需要自己把port改成2 ...
- Java高级特性 第13节 解析XML文档(1) - DOM和XPath技术
一.使用DOM解析XML文档 DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树 ...
- C goto
http://c.biancheng.net/view/266.html 当程序遇到 goto 后, 会无条件跳转到标签后出,然后程序按照顺序执行 例子: #include <stdio.h&g ...
- Linux colrm命令详解
Linux colrm命令 colrm用于从文件或标准输入中过滤掉指定的列.从标准输入设备读取书记,转而输出到标准输出设备.如果不加任何参数,则该指令不会过滤任何一行. 语法: colrm 参数 参数 ...
- Ubuntu16.04下安装xunsearch+opencc实现php客户端的中文分词
1.准备服务器环境 apt-get install apache2 php mysql-server apt-get install mysql-client phpmyadmin apt-get i ...
- windows下的拷贝利器robocopy
robocopy xxcopy http://www.cnblogs.com/zhanglei1371/p/6724167.html [转载]robocopy的用法 经常进行文件管理操作的朋友们,不满 ...
- MTSC2018 | 确认过眼神,在这里能遇见Google、阿里、百度......
MTSC2018部分Topic曝光啦 Google,阿里,百度,美团,小米,360,网易等公司是如何将技术转化为现实生产力,提高工作效率的?离开Saucelab的Jonathan又是如何规划Appiu ...