首页
美图
服务
付费
树洞
云主机
推荐
邻居
支付
开发
书单
更多
我的足迹
罗盘时钟
圈小猫
工作打分
给我留言
本站统计
推荐
M商城
欣悦云店
txt阅读器
VPS监控
证书监控
网址导航
在线工具
Search
1
docker和docker-compose一键安装脚本
8,949 阅读
2
采用Prometheus+Grafana 监控H3C交换机状态
7,603 阅读
3
WooCommerce对接第三方支付插件开发
6,162 阅读
4
docker下运行grafana和grafana Image Renderer
5,241 阅读
5
服务器(vps)性能测试脚本汇总
5,101 阅读
大模型
虚拟化
数据库
运维
基础知识
监控预警
数据展示
运维工具
web安全
系统服务
开发
python
php
java
shell
go
项目
博客
电商
工具
娱乐
综合
VPS相关
规范文档
知识总结
经验分享
读书笔记
关于
Search
标签搜索
django
python
支付对接
运维工具
电商平台
Joe主题
docker
wordpress
woocommerce
支付通道
zabbix
蓝鲸智云
运维
grafana
监控
运维知识
typecho
php
mysql
nginx
行云流水
累计撰写
329
篇文章
累计收到
385
条评论
首页
栏目
大模型
虚拟化
数据库
运维
基础知识
监控预警
数据展示
运维工具
web安全
系统服务
开发
python
php
java
shell
go
项目
博客
电商
工具
娱乐
综合
VPS相关
规范文档
知识总结
经验分享
读书笔记
关于
页面
美图
服务
树洞
云主机
邻居
支付
书单
给我留言
本站统计
推荐
M商城
txt阅读器
网址导航
搜索到
12
篇与
的结果
2025-11-06
woo-antom-gateway集成新通道教程
为了在 antom-payments 插件中集成 Boost 支付通道,同时保持原有目录结构不变,请按以下步骤操作:1. 添加前端资源文件1.1 在 assets/blocks/ 下创建 boost 目录:assets/blocks/boost/ ├── boost.asset.php └── boost.js从现有通道(如 alipay_cn)复制模板文件,修改类名和标识符为 boost。1.2 在 assets/images/ 下添加 Boost 图标:assets/images/Boost-A+.svg # 符合命名规范(如 Alipay-A+.svg)2. 添加后端网关类在 includes/gateways/ 下创建文件:includes/gateways/class-wc-gateway-antom-boost.php文件内容示例(基于 class-wc-gateway-antom-alipay-cn.php 修改):3. 添加区块支持类在 includes/blocks/ 下创建文件:includes/blocks/class-wc-gateway-antom-boost-block-support.php文件内容示例(基于其他通道修改):4. 添加资源目录脚本在 resource/ 下创建文件:resource/boost.js从 resource/alipay_cn.js 复制模板,替换内容标识为 boost。5. 注册网关到核心系统修改主文件 includes/antom-payment-gateway-settings.php: array( 'gateway_file' => $dir . '/gateways/class-wc-gateway-antom-boost.php', 'gateway_class' => 'WC_Gateway_Antom_Boost', 'block_file' => $dir . '/blocks/class-wc-gateway-antom-boost-block-support.php', 'block_support_class' => 'WC_Gateway_Antom_Boost_Block_Support', 'slug' => 'antom_gcash', 'default_display_name' => 'Boost', 'menu_title' => __( 'Boost', 'antom-payments' ) . ' ' . __( 'Settings', 'antom-payments' ), 'pay_name' => __( 'Boost by Antom', 'antom-payments' ), 'payment_method_type' => 'BOOST', 'support_currencies' => array( 'AED', 'CHF', 'HKD', 'QAR', 'EUR', 'DKK', 'USD', 'CAD', 'CNY', 'THB', 'AUD', 'SGD', 'JPY', 'PLN', 'GBP', 'NZD', 'PHP', 'TRY' ), 'icon' => ANTOM_PAYMENT_GATEWAYS_URL . 'assets/images/Boost-A+.svg', ),关键注意事项ID 一致性:网关类中的 $id(antom_boost)区块支持类中的 $gateway_id(antom_boost)资源文件名(boost.js)图标规范:SVG 文件命名为 Boost-A+.svg,与其他通道统一。区块注册:确保 includes/class-antom-frontend.php 中的区块注册逻辑自动加载 boost 目录(已有逻辑通常无需修改)。测试验证:在 WooCommerce 后台启用 Boost 支付方式。测试下单流程,检查支付表单是否正常渲染。通过以上步骤,Boost 通道即可无缝集成到现有插件中,且完全符合原有目录结构。
2025年11月06日
19 阅读
0 评论
0 点赞
2024-05-13
woocommerce在checkout页面自定义输入内容
关于对接第三方支付的过程中,有几个字段需要客户端上传。需要在checkout页面让客户输入然后提交。
2024年05月13日
456 阅读
0 评论
0 点赞
2024-01-08
wordpress外贸独立站对接第三方支付通道easylink
前言做跨境电商如何收款是所有商家都需要关注的。自由度最高的是基于wordpress的外贸独立站,独立站建好以后需要对接收款通道。easylink是香港的支付通道。下面分享对接过程。{card-default label="支付引导" width="75%"}{/card-default}支付流程交易流程是指访问网站的客户从选择商品下单到支付成功的整个流程。{card-default label="支付流程" width="80%"}{/card-default}插件开发熟悉整个流程后,就要根据通道提供的接口文档编写代码。代码编写的主要模块有签名函数,有订单提交,异步通知处理,同步跳转函数等。签名本通道采用sha256加密方式function buildMysign($sort_para, $key, $sign_type = "MD5") { $prestr = createLinkstring ( $sort_para ); $prestr = $prestr .'&'. $key; $mysgin = sign ( $prestr, $sign_type ); return $mysgin; } function createLinkstring($para) { $arg = ""; foreach ($para as $key => $val) { if ($key == "accessKey" || $key == "merchantCardNumber" || $key == "BankId" || $key == "merReserved") continue; else $arg .= $key . "=" . $val . "&"; } $arg = rtrim($arg, '&'); return $arg; } function paraFilter($para) { $para_filter = array (); foreach ($para as $key => $val) { $para_filter [$key] = $para [$key]; } return $para_filter; } function argSort($para) { ksort ( $para ); reset ( $para ); return $para; } function sign($prestr, $sign_type = 'MD5') { $sign = ''; $sign = hash($sign_type, $prestr); return $sign; }订单提交订单提交是组织好官方需要的字段,通过api接口提交并获取结果class Submit { function buildRequestPara($para_temp) { $key = '********'; $sign_method = 'SHA256'; $para_filter = paraFilter($para_temp); $para_sort = argSort($para_filter); $mysign = buildMysign($para_sort, trim($key), strtoupper(trim($sign_method))); $para_sort['accessKey'] = $mysign; return $para_sort; } function getMsg($para_temp, $gateway) { $respondData = ''; $para = $this->buildRequestPara($para_temp); $ch = curl_init ($gateway); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true); curl_setopt ( $ch, CURLOPT_BINARYTRANSFER, true); curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt ( $ch, CURLOPT_POSTFIELDS, $para); $output = curl_exec ( $ch ); curl_close ( $ch ); $respondData = json_decode($output); return $respondData; } }异步通知在用户支付成功后,通道会主动发起支付成功的通知到网站。需要专门的函数来处理支付结果。 function check_easylink_ipn_response() { global $woocommerce, $wpdb; require_once("lib/notify.class.php"); if (($_SERVER['REQUEST_METHOD'] === 'POST') && preg_match("/wc_easylink_notify/i", $_SERVER['REQUEST_URI'])) { $Notify = new Notify(); $verify_result = $Notify->verifyNotify(); if ( $verify_result ) { if ($_POST["respCode"] != "00") { error_log(__METHOD__ . PHP_EOL . $_POST["respMsg"]); } elseif ( $_POST['status'] == '1' ) { $sref = $_POST['paymentId']; $statustr = $this->easylink_processing; $check_query = $wpdb->get_results("SELECT order_id,order_state,mref FROM {$wpdb->prefix}easylink_data WHERE sref = '".addslashes($sref)."'", ARRAY_A); $check_query_count = count($check_query); if( $check_query_count >= 1 ) { if($check_query[0]['order_state'] == 'I') { $query = "update {$wpdb->prefix}easylink_data set order_state='C' where sref='".addslashes($sref)."'"; $wpdb->query($query); $inv_id = $check_query[0]['order_id']; $mref = $check_query[0]['mref']; $order = new WC_Order($inv_id); $order->update_status($statustr, __('Order has been paid by ID: ' . $mref, 'easylink-for-woocommerce')); wc_reduce_stock_levels( $order->get_id() ); add_post_meta( $inv_id, '_paid_date', current_time('mysql'), true ); update_post_meta( $inv_id, '_transaction_id', wc_clean($mref) ); $order->payment_complete(wc_clean($mref)); $woocommerce->cart->empty_cart(); } } } } //接口返回 exit('success'); } }同步跳转在网站处理支付成功的消息的同时,客户浏览器需要跳转到支付成功页面。function check_easylink_return() { global $woocommerce, $wpdb; if (($_SERVER['REQUEST_METHOD'] === 'GET') && preg_match("/wc_easylink_return/i", $_SERVER['REQUEST_URI'])) { //error_log(__METHOD__ . PHP_EOL .print_r($_GET, true)); $mref = $_GET['mref']; sleep(1); $check_query = $wpdb->get_results("SELECT order_id,order_state FROM {$wpdb->prefix}easylink_data WHERE mref = '".addslashes($mref)."'", ARRAY_A); $check_query_count = count($check_query); if($check_query_count >= 1){ $inv_id = $check_query[0]['order_id']; $inv_state = $check_query[0]['order_state']; switch ( $inv_state ) { case 'C': $order = new WC_Order($inv_id); wp_redirect(esc_url_raw(add_query_arg('key', $order->get_order_key(), add_query_arg('order-received', $inv_id, $this->get_return_url($order))))); break; default: wp_redirect( wc_get_cart_url() ); } exit; } } wp_redirect(home_url()); }完整的支付插件【支付插件】woocommerce对接香港支付通道easylink插件设置插件安装通过wordpress的后台页面上传然后激活即可,设置也非常简单。{card-default label="插件设置" width="80%"}{/card-default}
2024年01月08日
849 阅读
0 评论
0 点赞
2023-12-22
woocommerce对接第四方支付通道okpay
前言用wordpress+woocommerce做跨境独立站的朋友为了顺利收款,会对接各种国外的本地收款渠道。主流的用paypal等,不过通道越大。合规查的越严,小众的一些三方或四方通道,限制也会小一点。本文分享菲律宾四方通道okpay的对接过程。{card-default label="收银台" width="75%"}{/card-default}对接流程一般都是申请通道账号,根据接口文档开发插件,然后测试调试,通过后上线。支付插件主要有三个函数和签名函数。三个函数为提交订单信息获取支付链接,异步通知处理,同步跳转处理函数。核心代码md5签名函数 public function get_sign($srcArray, $merKey){ if(null == $srcArray){ return "123456"; } //先干掉sign字段 $keys = array_keys($srcArray); $index = array_search("sign", $keys); if ($index !== FALSE) { array_splice($srcArray, $index, 1); } //对数组排序 ksort($srcArray); //生成待签名字符串 $srcData = ""; foreach ($srcArray as $key => $val) { if($val === null || $val === "" ){ //值为空的跳过,不参与加密 continue; } $srcData .= "$key=$val" . "&"; } $srcData = substr($srcData, 0, strlen($srcData) - 1); //生成签名字符串 $sign = md5($srcData.$merKey); return $sign; }post提交函数 public function http_post($url, $sendInfo) { try { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60); curl_setopt($ch, CURLOPT_TIMEOUT, 60); // Set headers for JSON content curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Accept: application/json' )); // Encode $sendInfo as JSON $json_data = json_encode($sendInfo); curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data); $curl_result = curl_exec($ch); curl_close($ch); return $curl_result; } catch (Exception $e) { return null; } }支付成功后异步回调处理函数 if (($_SERVER['REQUEST_METHOD'] === 'POST') && preg_match("/wc_okpay_notify/i", $_SERVER['REQUEST_URI'])) { $response = file_get_contents("php://input"); error_log(__METHOD__ . PHP_EOL .print_r($response, true)); //参数 $respj = json_decode($response, true, 512, JSON_BIGINT_AS_STRING); //error_log(__METHOD__ . PHP_EOL .print_r($respj['data'], true)); if ($respj['data']) { //组织签名串 //$res_sign = $this->get_sign($_POST, $this->okpay_merchant_key); #订单号 $mref = $respj['data']['orderNo']; $sref = $respj['data']['businessNo'];; #写入数据库 $query = "update {$wpdb->prefix}okpay_data set order_state = 'C' where mref = '".addslashes($mref)."'"; $wpdb->query($query); #后续处理 $check_query = $wpdb->get_results("SELECT order_id FROM {$wpdb->prefix}okpay_data WHERE mref = '".addslashes($mref)."'", ARRAY_A); $check_query_count = count($check_query); if($check_query_count >= 1){ $order_id= $check_query[0]['order_id']; $order = new WC_Order($order_id); $statustr = $this->okpay_processing; $order->update_status($statustr, __('Order has been paid by ID: ' . $sref, 'okpay-for-woocommerce')); wc_reduce_stock_levels( $order->get_id() ); add_post_meta( $order_id, '_paid_date', current_time('mysql'), true ); update_post_meta( $order_id, '_transaction_id', wc_clean($order_id) ); $order->payment_complete(wc_clean($order_id)); $woocommerce->cart->empty_cart(); } }项目完整代码【支付插件】woocommerce对接第三方支付接口okpay
2023年12月22日
879 阅读
0 评论
0 点赞
2023-12-20
woocommerce对接第三方支付通道hambit
前言用wordpress+woocommerce做跨境独立站的朋友为了顺利收款,会对接各种国外的本地收款渠道。主流的用paypal等,不过通道越大。合规查的越严,小众的一些三方或四方通道,限制也会小一点。本文分享巴西通道hambit的对接过程。{card-default label="订单页" width="75%"}{/card-default}接口文档地址对接流程一般都是申请通道账号,根据接口文档开发插件,然后测试调试,通过后上线。{card-default label="流程" width="80%"}{/card-default}核心代码组织获取支付url的参数 $Body = array( "amount" => $amount, "channelType" => "PIX", "externalOrderId" => $mref, "notifyUrl" => $notify_url, "remark" => "USER", "returnUrl" => $return_url, "inputCpf" => 0 ); $sign_arr = $Body; $sign_arr['access_key'] = $AccessKey; $sign_arr['timestamp'] = $timestamp; $sign_arr['nonce'] = $uuid_str; $sign_str = $this->get_sign($sign_arr, $this->hambit_secret_key); //请求头 $Headers = array( 'Content-Type' => 'application/json;charset=utf-8', 'access_key' => $AccessKey, 'timestamp' => $timestamp, 'nonce' => $uuid_str, 'sign' => $sign_str );提交参数,获取url $req_api = $this->req_api.'/api/v3/bra/createCollectingOrder'; $postData = json_encode($Body); //打印参数 error_log(__METHOD__ . PHP_EOL .print_r($Body, true)); $args = array( 'headers' => $Headers, 'timeout' => 45, 'redirection' => 5, 'httpversion' => '1.0', 'blocking' => true, 'body' => $postData, ); // 提交参数 $postRequest = wp_remote_post($req_api, $args); if ($postRequest['response']['code'] === 200) { $result = json_decode($postRequest['body'], true); } else { error_log(__METHOD__ . PHP_EOL . 'Code:' . $postRequest['response']['code'] . PHP_EOL. ' Error:' . $postRequest['response']['message']); //抛出异常 throw new Exception("Unable to reach hambit Payments (" . $postRequest['response']['message'] . ")"); } error_log(__METHOD__ . PHP_EOL .print_r($result, true)); //结果处理 if (($result['code'] =='200') && ($result['msgEn'] =='SUCCESS')) { //写入数据库 $query = "insert into {$wpdb->prefix}hambit_data (mref, order_id, total_cost, currency, order_state, timestamp) values ('".$mref."', '". $order_id . "',".$amount.",'". $currency_code."','I', now())"; $wpdb->query($query); //支付链接 $PayUrl = $result['data']['cashierUrl']; //跳转payurl return array( 'result' => 'success', 'redirect' => $PayUrl ); } else { error_log(__METHOD__ .PHP_EOL. print_r($result, true)); throw new Exception("Unable to redirect payurl (" . $result['msg'] . ")"); }支付成功后异步处理 if (($_SERVER['REQUEST_METHOD'] === 'POST') && preg_match("/wc_hambit_notify/i", $_SERVER['REQUEST_URI'])) { //接收post json的数据 $response = file_get_contents("php://input"); error_log(__METHOD__ . PHP_EOL .print_r($response, true)); //参数 $respj = json_decode($response, true, 512, JSON_BIGINT_AS_STRING); //判断 if ($respj['orderStatus'] == 'Completed') { #订单号 $mref = $respj['externalOrderId']; $sref = $respj['orderId']; #写入数据库 $query = "update {$wpdb->prefix}hambit_data set order_state = 'C' where mref = '".addslashes($mref)."'"; $wpdb->query($query); #后续处理 $check_query = $wpdb->get_results("SELECT order_id FROM {$wpdb->prefix}hambit_data WHERE mref = '".addslashes($mref)."'", ARRAY_A); $check_query_count = count($check_query); if($check_query_count >= 1){ $order_id= $check_query[0]['order_id']; $order = new WC_Order($order_id); $statustr = $this->hambit_processing; $order->update_status($statustr, __('Order has been paid by ID: ' . $sref, 'hambit-for-woocommerce')); wc_reduce_stock_levels( $order->get_id() ); add_post_meta( $order_id, '_paid_date', current_time('mysql'), true ); update_post_meta( $order_id, '_transaction_id', wc_clean($order_id) ); $order->payment_complete(wc_clean($order_id)); $woocommerce->cart->empty_cart(); } } //接口返回 $return_resp = array( "code" => 200, "success" => true ); $jsonResponse = json_encode($return_resp); exit($jsonResponse); }项目完整代码【支付插件】woocommerce对接第三方支付接口hambit
2023年12月20日
576 阅读
0 评论
0 点赞
2023-09-13
第三方支付HKPay接口对接过程要点总结
HKPay是香港的一条支付通道,可用于外贸独立站做境外电商收款。
2023年09月13日
1,602 阅读
0 评论
0 点赞
2023-08-02
woocommerce通过代码添加商品之核心代码
开发woocommerce批量发布商品插件的过程中,需要通过代码的形式将商品发布。分享用到的核心代码。包括商品创建、图片下载上传、变体商品添加。调试了好久,终于搞定。
2023年08月02日
1,703 阅读
0 评论
0 点赞
2023-04-27
woocommerce插件开发总结
开发woocommerce插件开发过程中遇到的问题总结。
2023年04月27日
605 阅读
0 评论
0 点赞
2022-12-28
woocommerce批量添加商品
批量创建分类、导入商品、数据转换处理、批量设置价格
2022年12月28日
745 阅读
0 评论
0 点赞
2022-12-09
woocommerce订单添加自定义信息展示
woocommerce的订单详情页展示的信息有限。改造一下代码,以展示更多的信息。
2022年12月09日
595 阅读
0 评论
0 点赞
1
2