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來接收到賬通知。這個官網里說的都很詳細。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM