- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我需要创建 Woocommerce 处理订单的方式,以便我可以在 站点 A
上创建订单并将该订单发送到 站点 B
。
因此,当客户将商品添加到他们的购物车并点击结帐时,它会在 站点 A
和 站点 B
上创建订单,但是,它还会将用户重定向到 Site B
处理付款。
到目前为止我只能更改结帐按钮:
add_filter( 'woocommerce_get_checkout_url', 'my_change_checkout_url', 30 );
function my_change_checkout_url( $url ) {
$url = "your checkout url ";
return $url;
}
并创建订单。
if (isset($_POST['isOrder']) && $_POST['isOrder'] == 1) {
$address = array(
'first_name' => $_POST['notes']['domain'],
'last_name' => '',
'company' => $_POST['customer']['company'],
'email' => $_POST['customer']['email'],
'phone' => $_POST['customer']['phone'],
'address_1' => $_POST['customer']['address'],
'address_2' => '',
'city' => $_POST['customer']['city'],
'state' => '',
'postcode' => $_POST['customer']['postalcode'],
'country' => 'NL'
);
$order = wc_create_order();
foreach ($_POST['product_order'] as $productId => $productOrdered) :
$order->add_product( get_product( $productId ), 1 );
endforeach;
$order->set_address( $address, 'billing' );
$order->set_address( $address, 'shipping' );
$order->calculate_totals();
update_post_meta( $order->id, '_payment_method', 'ideal' );
update_post_meta( $order->id, '_payment_method_title', 'iDeal' );
// Store Order ID in session so it can be re-used after payment failure
WC()->session->order_awaiting_payment = $order->id;
// Process Payment
$available_gateways = WC()->payment_gateways->get_available_payment_gateways();
$result = $available_gateways[ 'ideal' ]->process_payment( $order->id );
// Redirect to success/confirmation/payment page
if ( $result['result'] == 'success' ) {
$result = apply_filters( 'woocommerce_payment_successful_result', $result, $order->id );
wp_redirect( $result['redirect'] );
exit;
}
}
虽然我不确定如何将所有这些放在一起,以便我可以同时使用站点 A 和站点 B。
我该怎么做?
编辑:为了更多地解释我需要这样做,我需要在第二个网站上处理付款,该网站也有产品。
因此,客户在站点 A 上购买产品,在单击“使用 Paypal 付款”(即时结帐)和“继续付款”后,客户及其填写的信息将被带到站点 B,在那里他们要么能够完成付款,或直接转到站点 B 上的 Paypal 网关。
最佳答案
试试这个
在站点 A 中添加此代码。
function action_woocommerce_new_order( $order_id ) {
//get all order details by $order_id
//post your data to site B
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://yoursiteB.com/wp-json/api/v2/create_wc_order");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
"postvar1=value1&postvar2=value2");
// In real life you should use something like:
// curl_setopt($ch, CURLOPT_POSTFIELDS,
// http_build_query(array('postvar1' => 'value1')));
// Receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close ($ch);
};
add_action( 'woocommerce_payment_complete', 'action_woocommerce_new_order', 10, 1 );
在站点 B 中添加此代码。
Class WC_Rest_API {
public function __construct() {
add_action( 'rest_api_init', array( $this, 'init_rest_api') );
}
public function init_rest_api() {
register_rest_route('api/v2', '/create_wc_order', array(
'methods' => 'POST',
'callback' => array($this,'create_wc_order'),
));
}
public function create_wc_order( $data ) {
//$data - all the details needs to be send from site A
global $woocommerce;
$user_id = $data['user_id'];
$user = get_user_by( 'ID', $user_id);
$phonenumer = get_user_meta( $user_id,'user_phoneno', true);
if($user) {
$address = array(
'first_name' => $user->display_name,
'last_name' => $user->display_name,
'email' => $user->user_email,
'phone' => $phonenumer,
);
$order = wc_create_order();
//get product details from rest api site A
$order->add_product();
$order->set_address( $address, 'billing' );
$order->calculate_totals();
$order = wc_get_order( $order->id );
$response['status'] = 'success';
$response['message'] = 'Order created on wordpress site B.';
return new WP_REST_Response($response, 200);
}
}
}
$rest_api = new WC_Rest_API();
通过下面的 URL 将站点 A 的所有数据发送到站点 B。
http://yoursiteB.com/wp-json/api/v2/create_wc_order
方法应该是'POST'
数据应包含从站点 A 订购的所有详细信息。
如果您有任何问题,请告诉我。
关于php - 更改 Woocommerce 结帐以在单独的 WordPress 网站上处理订单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54431908/
我似乎记得在某个地方看到过这个,但在我的一生中,搜索并没有出现我正在寻找的结果。这是我想要的: 我有一个项目存储库。我想将其他 svn 存储库中的库包含在我的项目中。当我对主项目执行 SVN 提交时,
我正在 Magento 中寻找我的结帐购物车页面的解决方案。当我将商品放入购物车时,购物车页面变得空白。!! 我已经尝试了几个选项,但它仍然显示为空白。我启用了 cookie 等,但仍然没有运气。我正
我有一个文件,其中包含 CVS 存储库中包含的许多标签。有没有一种方法可以只使用这些标签 checkout 所有文件及其相关目录,而无需 checkout 整个存储库? 我没有存储库中的目录列表,因此
我正在尝试为客户站点开发一个结帐系统,我想知道执行此操作的最佳方法。请让我知道我在下面尝试过的任何替代方法。 目前我有: 1) 购物车中的商品保存到 $_SESSION 变量 2) 当用户按下“结帐”
我真的很想为我正在开发的市场使用 Paypal。我需要允许用户输入他们的 paypal 电子邮件地址,每当客户购买该用户的产品时,我都会收取少量费用,然后剩下的钱会转到列出该产品的用户。 哪种 pay
有没有办法让输入信用卡信息的部分默认打开,而不是输入paypal信息的部分? 我真的很需要这个,但是到处都找不到! 最佳答案 做到这一点的唯一方法是使用 Express Checkout .在你的Se
我正在使用在 node 下运行的 Stripe Subscription。 我想创建一个预先填写电子邮件地址的新结帐。所以我尝试在客户端做: // Setup event handler to cre
我正在尝试使用 Checkout Dependencies Leiningen 中的功能用于使用 Flambo checkout 的项目.我的 project.clj 看起来像这样: (defproj
谁能告诉我如何使用 Maven 从 SVN 进行结账和进一步更新?我阅读了 maven.apache.org 上的文档,但似乎我对此太愚蠢了,因为我无法理解如何使用 scm:checkout 和 sc
我在 onepage/checkout/success 页面上遇到了麻烦,因为我想将根模板从 2columns-right.phtml 设置为 1column.phtml。应该问题不大... 我得到了
我使用 subversion 创建新存储库的正常工作流程是创建一个新存储库,检查存储库根目录,创建我的分支标签和主干文件夹,并将我的初始文件放在主干中。然后我提交这个“初始导入”,从我的硬盘驱动器中删
我已经使用以下代码向管理员用户添加了自定义元字段:`` function wporg_usermeta_form_field_birthday( $user ) { ?>
我想将 CVS 模块深处的特定文件夹 check out 到我的 Hudson/Jenkins 工作区中。剥离其他选项(例如修剪、分支等),CVS 命令是... cvs checkout -d wor
我正在尝试 git checkout Jenkinsfile跟随方式 stage ('Repo Checkout') { steps { dir('My-Repo') {
我们的大多数项目都使用很多通用代码。我们(最终)正朝着以统一方式管理共享代码的系统迈进。我们将共享代码视为 SVN 中的一个单独项目,然后将其作为外部引用。然而,我们倾向于在项目开发时将外部库指向开发
我已经使用 node.js 实现了 strip 结帐 product.photo是 https://test.s3.amazonaws.com/2213131 const session = awai
将产品添加到购物车时出现问题,它会转到结帐页面,但除了周围的页眉/页脚模板之外,该页面是空的。 我已经尝试了我能想到的一切,它不是主题(发生在所有主题上),我尝试禁用编译器和刷新缓存等.. 服务器日志
有什么方法可以禁用 Magento 中的购物卡/结账/送货选项吗? 我正在开发一个产品比较网站,其价格是从联属网站列出的。 我实际上并没有在我的网站上销售任何东西。 最佳答案 aDVo,如果禁用以下m
我正在做一个订购冰淇淋的程序,用户首先应该在圆锥体或杯子之间进行选择(作为按钮),当他单击按钮时,总数会显示在文本字段中,然后他可以继续选择口味作为复选框,每当他添加额外的 flavor 等时,总数就
我正在使用 HTML 5 required 属性进行表单验证。现在我想要的是,如果表单已经通过了 HTML 5 验证,它应该将用户带到 strip 结帐(我故意在下面的代码中为 SO 问题 xxx 输
我是一名优秀的程序员,十分优秀!