通用的支付插件,方便開發(fā)者對(duì)接支付平臺(tái):支付寶支付、虎皮椒支付、易支付
購買 / 收藏:請(qǐng)先登錄
開發(fā)者:emlog
通用的支付插件,方便對(duì)接支付平臺(tái),目前只支持支付寶支付、虎皮椒支付、易支付。
??該插件需要配合其他應(yīng)用主題或者插件來實(shí)現(xiàn)下單購買的功能,僅僅安裝該插件沒任何意義
APPID應(yīng)用私鑰、支付寶公鑰APPID、應(yīng)用私鑰、支付寶公鑰易支付是一套支付框架,基于這套框架可以搭建屬于自己的易支付平臺(tái)。市面上也有很多易支付平臺(tái),請(qǐng)仔細(xì)甄別,避免資金損失。
本插件基于:源開易支付 測(cè)試開發(fā)。目前基于易支付 v1 接口,參考文檔:https://pay.yuankainet.cn/doc_old.html
虎皮椒支付是一個(gè)個(gè)人支付接口平臺(tái),支持微信和支付寶收款。
APPID 和 APPSECRETAPPID、APPSECRET代碼對(duì)接部分針對(duì)應(yīng)用開發(fā)者,普通用戶請(qǐng)忽略
<?php
$sku_id = Input::postIntVar('sku_id');
$sku_name = 'xxxxx';
$pay_type = 'alipay';
$pay_notify_url = BLOG_URL . 'user/order_callback';
$sku_info = $Log_Model->getDetail($sku_id);
$price = $sku_info['fields']['price'];
if ($price <= 0) {
Output::error('價(jià)格錯(cuò)誤', 200);
}
$Order_Model = new Order_Model('appname');
$order_id = $Order_Model->createOrder(UID, $pay_type, $sku_name, $sku_id, $price);
$paySdk = EmAliPaySdk::getInstance();
$response = $paySdk->createFaceToFacePayment($order_id, $price, '購買付費(fèi)資源', $pay_notify_url);
if ($response['success']) {
$qrCode = $response['qr_code'];
Output::ok(['qrcode_url' => "https://api.qrserver.com/v1/create-qr-code/?data={$qrCode}", 'order_id' => $order_id, 'sku_id' => $sku_id], 200);
} else {
Output::error($response['message'], 200);
}
<?php
$sku_id = Input::postIntVar('sku_id');
$sku_name = 'xxxxx';
$pay_type = 'alipay';
$return_url= BLOG_URL . '?post=' . $sku_id;
$sku_info = $Log_Model->getDetail($sku_id);
$price = $sku_info['fields']['price'];
if ($price <= 0) {
Output::error('價(jià)格錯(cuò)誤', 200);
}
$Order_Model = new Order_Model('appname');
$order_id = $Order_Model->createOrder(UID, $pay_type, $sku_name, $sku_id, $price);
$paySdk = EmAliPaySdk::getInstance();
$paySdk->createWebPayment($order_id, $price, $return_url);
<?php
$request = $_POST;
header('Content-Type: application/json');
if (empty($request)) {
Output::error('參數(shù)錯(cuò)誤', 200);
}
$paySdk = EmAliPaySdk::getInstance();
$result = $paySdk->handleFaceToFaceCallback($request);
if ($result) {
$out_trade_no = isset($request['out_trade_no']) ? $request['out_trade_no'] : '';
$Order_Model = new Order_Model('appname');
$data = [
'order_id' => $out_trade_no,
'pay_price' => $result['total_amount'],
'out_trade_no' => $result['trade_no'],
'update_time' => time(),
];
$Order_Model->updateOrder($out_trade_no, $data);
Output::ok('success', 200);
} else {
Output::error('fail', 200);
}
目前基于易支付 v1 接口,參考文檔:https://pay.yuankainet.cn/doc_old.html
$sku_id = Input::postIntVar('sku_id');
$sku_name = Input::postStrVar('sku_name');
$pay_type = Input::postStrVar('pay_type', 'alipay');
$pay_notify_url = BLOG_URL . 'user/order_callback'; // 支付成功后,易支付會(huì)回調(diào)該地址
$pay_return_url = BLOG_URL . 'user/order'; // 支付成功后跳轉(zhuǎn)的頁面
// 獲取商品價(jià)格
$sku_info = $Log_Model->getDetail($sku_id);
$price = $sku_info['fields']['price'];
// 創(chuàng)建訂單
$Order_Model = new Order_Model('wind-max');
$order_id = $Order_Model->createOrder(UID, $pay_type, $sku_name, $sku_id, $price);
$easyPay = EmEasyPaySdk::getInstance();
$result = $easyPay->createPageJumpPayment($order_id, $price, $sku_title, $pay_notify_url, $pay_return_url);
if ($result['success'] && isset($result['gateway_url'])) {
Output::ok(['gateway_url' => $result['gateway_url'], 'order_id' => $result['order_id'], 'params' => $result['params']], 200);
} else {
Output::error(isset($result['message']) ? $result['message'] : '易支付創(chuàng)建失敗', 200);
}
前臺(tái)js請(qǐng)求下單接口,利用下單接口返回的數(shù)據(jù),構(gòu)建form表單直接post提交跳轉(zhuǎn)到支付頁面,演示js代碼如下:
// 支付按鈕
<form id="payment-form-easypay" action="order_pay" method="post" class="space-y-4">
<input type="hidden" id="sku_id" name="sku_id" value="<?= $sku_id ?>">
<input type="hidden" id="sku_name" name="sku_name" value="<?= $sku_name ?>">
<button type="submit" class="py-2 px-4 bg-green-600 hover:bg-green-700 focus:ring-green-500 focus:ring-offset-green-200 text-white w-full transition ease-in duration-200 text-center text-base font-semibold shadow-md focus:outline-none focus:ring-2 focus:ring-offset-2 rounded-lg flex items-center justify-center space-x-2">
<span>去支付</span>
</button>
</form>
// ajax請(qǐng)求下單接口
$('#payment-form-easypay').on('submit', function(e) {
e.preventDefault();
const formData = $(this).serialize();
$.ajax({
url: $(this).attr('action'),
type: 'POST',
data: formData,
success: function(response) {
if (response.code === 0) {
generateAndSubmitPaymentForm(response.data.gateway_url, response.data.params);
}
},
error: function() {
cocoMessage.error('發(fā)起支付失敗,請(qǐng)檢查網(wǎng)絡(luò)連接或稍后再試', 4000)
closeModalWindow();
}
});
});
/**
* 生成支付表單并自動(dòng)提交,跳轉(zhuǎn)到易支付平臺(tái),完成支付后跳轉(zhuǎn)回返回頁面
*/
function generateAndSubmitPaymentForm(gateway, params) {
// 創(chuàng)建表單元素
var form = document.createElement('form');
form.id = 'dynamicPaymentForm';
form.method = 'post';
form.action = gateway;
form.style.display = 'none';
// 添加隱藏字段
for (var key in params) {
if (params.hasOwnProperty(key)) {
var input = document.createElement('input');
input.type = 'hidden';
input.name = key;
input.value = params[key];
form.appendChild(input);
}
}
// 將表單添加到頁面并提交
document.body.appendChild(form);
form.submit();
// 提交后移除表單
setTimeout(function() {
if (document.body.contains(form)) {
document.body.removeChild(form);
}
}, 100);
}
$request = $_GET;
if (empty($request)) {
Output::error('參數(shù)錯(cuò)誤', 200);
}
// 處理易支付回調(diào)
$easyPaySdk = EmEasyPaySdk::getInstance();
$result = $easyPaySdk->handleNotify($request);
if ($result) {
$out_trade_no = $result['order_id'];
$Order_Model = new Order_Model('wind-max');
$data = [
'order_id' => $out_trade_no,
'pay_price' => $result['total_amount'],
'out_trade_no' => $result['trade_no'],
'update_time' => time(),
];
$r = $Order_Model->updateOrder($out_trade_no, $data);
// 易支付回調(diào)需要返回success
echo 'success';
exit;
} else {
echo 'fail';
exit;
}
<?php
$sku_id = Input::postIntVar('sku_id');
$sku_name = 'xxxxx';
$pay_type = 'xunhu';
$notify_url = BLOG_URL . 'user/order_callback';
$return_url = BLOG_URL . '?post=' . $sku_id;
$sku_info = $Log_Model->getDetail($sku_id);
$price = $sku_info['fields']['price'];
if ($price <= 0) {
Output::error('價(jià)格錯(cuò)誤', 200);
}
$Order_Model = new Order_Model('appname');
$order_id = $Order_Model->createOrder(UID, $pay_type, $sku_name, $sku_id, $price);
$paySdk = EmXunhuPaySdk::getInstance();
$response = $paySdk->createPayment($order_id, $price, $sku_name, $notify_url, $return_url);
if ($response['success']) {
// 支持兩種支付方式:網(wǎng)頁跳轉(zhuǎn)和二維碼支付
echo "支付創(chuàng)建成功!<br>";
echo "訂單號(hào):" . $response['order_id'] . "<br>";
echo "支付鏈接:<a href='" . $response['pay_url'] . "' target='_blank'>點(diǎn)擊支付</a><br>";
// 如果有二維碼地址,顯示二維碼支付選項(xiàng)
if (!empty($response['qrcode_url'])) {
echo "二維碼支付:<br>";
echo "<img src='" . $response['qrcode_url'] . "' alt='支付二維碼' style='width:200px;height:200px;'><br>";
echo "掃描上方二維碼完成支付<br>";
}
} else {
Output::error($response['message'], 200);
}
返回結(jié)果:
success: 是否成功order_id: 訂單號(hào)pay_url: 支付鏈接(跳轉(zhuǎn)網(wǎng)頁支付)qrcode_url: 二維碼支付地址(可選,用于生成二維碼支付) $request = $_POST;
if (empty($request)) {
// 虎皮椒回調(diào)失敗需要返回 fail
echo 'fail';
exit;
}
$paySdk = EmXunhuPaySdk::getInstance();
$result = $paySdk->handleNotify($request);
if ($result) {
$out_trade_no = $result['order_id'];
$Order_Model = new Order_Model('appname');// 這里 appname改為你的應(yīng)用名稱
$data = array(
'order_id' => $out_trade_no,
'pay_price' => $result['total_fee'],
'out_trade_no' => $result['transaction_id'],
'update_time' => time(),
);
$updateResult = $Order_Model->updateOrder($out_trade_no, $data);
if ($updateResult) {
// 虎皮椒回調(diào)成功需要返回 success
echo 'success';
exit;
} else {
echo 'fail';
exit;
}
} else {
echo 'fail';
exit;
}
阿六哥哥
鐵桿 7個(gè)月前
希望后續(xù)接入微信支付~