{"id":366207,"date":"2026-10-28T12:59:31","date_gmt":"2026-10-28T12:59:31","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/pay-jp-for-woocommerce\/"},"modified":"2026-10-28T12:58:58","modified_gmt":"2026-10-28T12:58:58","slug":"payjp-for-wc","status":"publish","type":"plugin","link":"https:\/\/cor.wordpress.org\/plugins\/payjp-for-wc\/","author":23562853,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.4","requires":"6.9","requires_php":"8.3","requires_plugins":null,"header_name":"PAY.JP for WooCommerce","header_author":"PAY, Inc.","header_description":"PAY.JP v2 payment gateway for WooCommerce. Supports credit card and PayPay payments via Payment Widgets.","assets_banners_color":"f6f7fa","last_updated":"2026-10-28 12:58:58","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/payjp-for-wc\/","header_author_uri":"https:\/\/pay.jp\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":89,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"payjp4woocommerce","date":"2026-10-28 12:58:58","revision":3770714}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3770714,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3770714,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3770714,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3770714,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3770714,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3770714,"resolution":"1","location":"assets","locale":"","width":1200,"height":900}},"screenshots":{"1":"PAY.JP unified settings page \u2014 configure API keys, test\/live mode, and webhook secret.","2":"Credit card payment widget embedded in the Block Checkout page.","3":"PayPay payment widget embedded in the Block Checkout page.","4":"Saved card selection at checkout for returning customers.","5":"WooCommerce order detail screen showing PAY.JP payment information and refund controls."}},"plugin_section":[],"plugin_tags":[3148,289215,507,197440,286],"plugin_category":[45],"plugin_contributors":[289216],"plugin_business_model":[],"class_list":["post-366207","plugin","type-plugin","status-publish","hentry","plugin_tags-checkout","plugin_tags-payjp","plugin_tags-payment","plugin_tags-paypay","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-payjp4woocommerce","plugin_committers-payjp4woocommerce"],"banners":{"banner":"https:\/\/ps.w.org\/payjp-for-wc\/assets\/banner-772x250.png?rev=3770714","banner_2x":"https:\/\/ps.w.org\/payjp-for-wc\/assets\/banner-1544x500.png?rev=3770714","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/payjp-for-wc\/assets\/icon.svg?rev=3770714","icon":"https:\/\/ps.w.org\/payjp-for-wc\/assets\/icon.svg?rev=3770714","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/payjp-for-wc\/assets\/screenshot-1.png?rev=3770714","caption":"PAY.JP unified settings page \u2014 configure API keys, test\/live mode, and webhook secret."}],"raw_content":"<!--section=description-->\n<p><strong>PAY.JP for WooCommerce<\/strong> integrates the <a href=\"https:\/\/pay.jp\/\">PAY.JP<\/a> v2 Payment Widgets into your WooCommerce store, enabling you to accept credit card payments and PayPay payments securely and easily.<\/p>\n\n<p>Raw card data never touches your server. The PAY.JP payments.js widget handles card entry entirely in a PCI DSS compliant iframe, keeping your integration simple and your compliance scope minimal.<\/p>\n\n<h3>Key Features<\/h3>\n\n<p><strong>Credit Card Payments<\/strong><\/p>\n\n<ul>\n<li>Embedded PAY.JP v2 Payment Widgets (no redirect, PCI DSS compliant)<\/li>\n<li>Save cards to customer accounts for faster repeat checkout<\/li>\n<li>Full and partial refunds directly from the WooCommerce order screen<\/li>\n<\/ul>\n\n<p><strong>PayPay Payments<\/strong><\/p>\n\n<ul>\n<li>Embedded PayPay widget via PAY.JP v2 Payment Widgets<\/li>\n<li>Seamless in-page payment experience<\/li>\n<li>Full and partial refunds directly from the WooCommerce order screen<\/li>\n<\/ul>\n\n<p><strong>Subscriptions<\/strong><\/p>\n\n<ul>\n<li>WooCommerce Subscriptions compatible for automatic recurring billing<\/li>\n<li>Saved card via PAY.JP Setup Flow powers subscription renewals<\/li>\n<\/ul>\n\n<p><strong>Developer &amp; Store Friendly<\/strong><\/p>\n\n<ul>\n<li>Block Checkout (WooCommerce 8.3+) and Classic Checkout both supported<\/li>\n<li>HPOS (High-Performance Order Storage) compatible<\/li>\n<li>Multisite compatible<\/li>\n<li>Test mode \/ Live mode toggle \u2014 no code changes required<\/li>\n<li>Webhook processing for <code>payment_flow.succeeded<\/code>, <code>payment_flow.payment_failed<\/code>, and <code>refund.created<\/code> events<\/li>\n<li>Clean uninstall \u2014 removes all plugin data and options on deletion<\/li>\n<\/ul>\n\n<h3>How It Works<\/h3>\n\n<ol>\n<li>The checkout page loads the PAY.JP payments.js widget from PAY.JP's CDN.<\/li>\n<li>The customer enters card details (or selects PayPay) entirely within the secure widget.<\/li>\n<li>PAY.JP returns a Payment Flow ID to your server \u2014 raw card data never reaches WordPress.<\/li>\n<li>WooCommerce processes the order and the plugin completes the payment via the PAY.JP v2 API.<\/li>\n<\/ol>\n\n<h3>Requirements<\/h3>\n\n<ul>\n<li>WordPress 6.9 or later<\/li>\n<li>WooCommerce 9.0 or later<\/li>\n<li>PHP 8.3 or later<\/li>\n<li>A <a href=\"https:\/\/pay.jp\/\">PAY.JP account<\/a> (free to register)<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to the following external services. By using this plugin you agree to their respective terms and privacy policies.<\/p>\n\n<h3>1. PAY.JP API<\/h3>\n\n<p>Used to create and manage Payment Flows, process payments, issue refunds, and manage saved payment methods.<\/p>\n\n<ul>\n<li><strong>Endpoint:<\/strong> <code>https:\/\/api.pay.jp\/v2<\/code><\/li>\n<li><strong>When called:<\/strong> At checkout when a payment is initiated, on order completion, on refund, and during webhook processing.<\/li>\n<li><strong>Data sent:<\/strong> Payment Flow ID, order amount, currency, and (for saved cards) PAY.JP Customer ID. Raw card numbers are <strong>never<\/strong> sent to your server or to the API directly from WordPress.<\/li>\n<li><strong>Privacy Policy:<\/strong> https:\/\/pay.co.jp\/privacy<\/li>\n<li><strong>Terms of Service:<\/strong> https:\/\/pay.jp\/legal\/tos<\/li>\n<\/ul>\n\n<h3>2. PAY.JP payments.js (CDN)<\/h3>\n\n<p>The PAY.JP payments.js script is loaded from PAY.JP's CDN to render the secure card entry and PayPay widget on the checkout page. This is the standard PCI DSS compliant integration method (equivalent to Stripe.js for Stripe).<\/p>\n\n<ul>\n<li><strong>Script URL:<\/strong> <code>https:\/\/js.pay.jp\/payments.js<\/code><\/li>\n<li><strong>When loaded:<\/strong> On any checkout page where PAY.JP is an available payment method.<\/li>\n<li><strong>Data handled:<\/strong> Card details entered by the customer are tokenized entirely within this script and its iframe \u2014 they are never accessible to your WordPress site.<\/li>\n<li><strong>Privacy Policy:<\/strong> https:\/\/pay.co.jp\/privacy<\/li>\n<li><strong>Terms of Service:<\/strong> https:\/\/pay.jp\/legal\/tos<\/li>\n<\/ul>\n\n<!--section=installation-->\n<h4>Automatic Installation<\/h4>\n\n<ol>\n<li>Log in to your WordPress admin panel.<\/li>\n<li>Go to <strong>Plugins &gt; Add New<\/strong>.<\/li>\n<li>Search for \"PAY.JP for WooCommerce\".<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<li>Go to <strong>WooCommerce &gt; Settings &gt; Payments<\/strong> and configure PAY.JP.<\/li>\n<\/ol>\n\n<h4>Manual Installation<\/h4>\n\n<ol>\n<li>Download the plugin ZIP from the WordPress.org plugin directory.<\/li>\n<li>Go to <strong>Plugins &gt; Add New &gt; Upload Plugin<\/strong> and upload the ZIP.<\/li>\n<li>Activate the plugin through the Plugins screen.<\/li>\n<li>Go to <strong>WooCommerce &gt; Settings &gt; Payments<\/strong> and configure PAY.JP.<\/li>\n<\/ol>\n\n<h4>Configuration<\/h4>\n\n<ol>\n<li>Navigate to <strong>WooCommerce &gt; Settings &gt; Payments<\/strong>.<\/li>\n<li>Click <strong>PAY.JP<\/strong> to open the unified settings page.<\/li>\n<li>Enter your <strong>Public Key<\/strong> and <strong>Secret Key<\/strong> from the <a href=\"https:\/\/console.pay.jp\/d\/login\">PAY.JP dashboard<\/a>.<\/li>\n<li>Set the mode to <strong>Test<\/strong> for development or <strong>Live<\/strong> for production.<\/li>\n<li>Copy the <strong>Webhook URL<\/strong> shown in the settings and register it in your PAY.JP dashboard under <strong>Webhook<\/strong>.<\/li>\n<li>Save changes and place a test order.<\/li>\n<\/ol>\n\n<p><strong>Webhook URL format:<\/strong> <code>https:\/\/yoursite.com\/wp-json\/payjp\/v2\/webhook<\/code><\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20i%20get%20my%20pay.jp%20api%20keys%3F\"><h3>Where do I get my PAY.JP API keys?<\/h3><\/dt>\n<dd><p>Sign up or log in at <a href=\"https:\/\/console.pay.jp\/d\/login\">pay.jp<\/a>, then go to <strong>API<\/strong> in the dashboard. You will find your Public Key and Secret Key there. Use the test keys during development and the live keys for production.<\/p><\/dd>\n<dt id=\"is%20this%20plugin%20pci%20dss%20compliant%3F\"><h3>Is this plugin PCI DSS compliant?<\/h3><\/dt>\n<dd><p>Yes. Raw card data never touches your server. All card entry is handled by the PAY.JP payments.js widget loaded from PAY.JP's CDN, which tokenizes the card data in a secure iframe. Only a Payment Flow ID is sent to your server.<\/p><\/dd>\n<dt id=\"how%20do%20i%20test%20payments%3F\"><h3>How do I test payments?<\/h3><\/dt>\n<dd><p>Enable <strong>Test Mode<\/strong> in the plugin settings and use your PAY.JP test API keys. For PayPay test payments, use one of the reserved test phone numbers: 080-1111-5912 through 080-1111-5921. Each PayPay test transaction is capped at \u00a5100.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20support%20woocommerce%20subscriptions%3F\"><h3>Does this plugin support WooCommerce Subscriptions?<\/h3><\/dt>\n<dd><p>Yes. When a customer completes their first subscription payment, their card is saved via PAY.JP Setup Flow. Subsequent automatic renewal payments are processed against the saved PAY.JP Customer ID without requiring the customer to re-enter their card.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20support%20saving%20cards%3F\"><h3>Does this plugin support saving cards?<\/h3><\/dt>\n<dd><p>Yes. Customers can save cards to their account during checkout. Saved cards are stored as WooCommerce payment tokens backed by PAY.JP Customer IDs and PaymentMethod IDs \u2014 no raw card data is stored in your database.<\/p><\/dd>\n<dt id=\"how%20do%20i%20configure%20webhooks%3F\"><h3>How do I configure webhooks?<\/h3><\/dt>\n<dd><ol>\n<li>In the PAY.JP for WooCommerce settings, copy the <strong>Webhook URL<\/strong> (<code>https:\/\/yoursite.com\/wp-json\/payjp\/v2\/webhook<\/code>).<\/li>\n<li>Log in to your PAY.JP dashboard and go to <strong>Webhook<\/strong>.<\/li>\n<li>Add the webhook URL and enable the following events: <code>payment_flow.succeeded<\/code>, <code>payment_flow.payment_failed<\/code>, <code>refund.created<\/code>.<\/li>\n<li>Copy the <strong>Webhook Secret<\/strong> from PAY.JP into the plugin settings and save.<\/li>\n<\/ol><\/dd>\n<dt id=\"does%20this%20plugin%20work%20with%20block%20checkout%3F\"><h3>Does this plugin work with Block Checkout?<\/h3><\/dt>\n<dd><p>Yes. PAY.JP for WooCommerce supports both the Block-based Checkout (introduced in WooCommerce 8.3) and the Classic Checkout shortcode.<\/p><\/dd>\n<dt id=\"is%20hpos%20%28high-performance%20order%20storage%29%20supported%3F\"><h3>Is HPOS (High-Performance Order Storage) supported?<\/h3><\/dt>\n<dd><p>Yes. The plugin is fully compatible with WooCommerce HPOS and uses the WooCommerce order meta API (<code>$order-&gt;get_meta()<\/code>, <code>$order-&gt;update_meta_data()<\/code>) exclusively.<\/p><\/dd>\n<dt id=\"can%20i%20process%20partial%20refunds%3F\"><h3>Can I process partial refunds?<\/h3><\/dt>\n<dd><p>Yes. Navigate to the WooCommerce order screen, click <strong>Refund<\/strong>, enter the amount to refund, and click <strong>Refund via PAY.JP<\/strong>. Both full and partial refunds are supported.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20uninstall%20the%20plugin%3F\"><h3>What happens to my data if I uninstall the plugin?<\/h3><\/dt>\n<dd><p>Uninstalling (deleting) the plugin removes all plugin options from your database. Order meta is intentionally retained as a permanent payment record. PAY.JP customer records remain on the PAY.JP side; manage or delete those from your PAY.JP dashboard.<\/p><\/dd>\n<dt id=\"is%20multisite%20supported%3F\"><h3>Is multisite supported?<\/h3><\/dt>\n<dd><p>Yes. The plugin is compatible with WordPress multisite. Each site in the network uses its own PAY.JP API keys and settings.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<p>Initial release.<\/p>\n\n<ul>\n<li>Credit card payments via embedded PAY.JP v2 Payment Widgets \u2014 no redirect, and raw card data never reaches your server.<\/li>\n<li>PayPay payments via embedded PAY.JP v2 Payment Widgets.<\/li>\n<li>Saved cards for faster repeat checkout, backed by PAY.JP Setup Flow and WooCommerce payment tokens.<\/li>\n<li>WooCommerce Subscriptions support for automatic recurring billing with saved cards.<\/li>\n<li>Immediate capture or authorize only (capture when the order is marked Completed) for both credit card and PayPay.<\/li>\n<li>Full and partial refunds from the WooCommerce order screen for credit card and PayPay orders.<\/li>\n<li>Cancelling a WooCommerce order cancels the PAY.JP payment automatically, and payments that were already captured are refunded automatically.<\/li>\n<li>Orders paid with asynchronous methods such as PayPay are kept from WooCommerce's automatic \"unpaid order\" cancellation while the payment is in progress, and are confirmed automatically once the result is known.<\/li>\n<li>Webhook processing for <code>payment_flow.succeeded<\/code>, <code>payment_flow.payment_failed<\/code>, and <code>refund.created<\/code>. A notification that arrives after an order is already finalized is recorded as an order note and an admin email instead of changing the order status.<\/li>\n<li>One shared settings page for API keys, test\/live mode, and the webhook secret, with links to the PAY.JP dashboard and test card \/ PayPay test account information in test mode.<\/li>\n<li>Block Checkout and Classic Checkout support.<\/li>\n<li>HPOS (High-Performance Order Storage) and multisite compatible.<\/li>\n<li>Clean uninstall that removes all plugin options.<\/li>\n<\/ul>","raw_excerpt":"Accept credit card and PayPay payments in WooCommerce via PAY.JP v2 Payment Widgets. PCI DSS compliant, no raw card data on your server.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/366207","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=366207"}],"author":[{"embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/payjp4woocommerce"}],"wp:attachment":[{"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=366207"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=366207"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=366207"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=366207"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=366207"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=366207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}