WexinPay for WooCommerce : 微信支付

WexinPay for WooCommerce 是一个为 WooCommerce 添加一个 基于JSAPI接口微信支付网关 的 WordPress 插件。

主要特性

支持微信支付的JSAPI接口;

据微信支付的异步通知响应订单状态,同步仅作跳转;

支持游客支付(需要在WooCommerce->设置->结算页面允许游客支付);

支持多币种;

支持管理员在WooCommerce->订单->某个订单详情页面的退款操作(退款的订单将会即时通知微信支付退款给订单相应的顾客);

支持库存管理(支付完成后,订单为处理中的状态,减少库存,已退款的订单增加订单中商品的相应库存);

仅在微信浏览器出现(必需的),在微信浏览器屏蔽掉可能存在的Alipay for WooCommerce 以及 AlipayWAP for WooCommerce;

测试截图

1. 在结算页面选用微信支付网关:

WooCommerce 采用微信网关支付

2. 从站内或者微信服务器获取当前已在网站登录的顾客的openid,并准备数据包,获取prepayID,然后发起支付

 

WooCommerfce 微信支付

 

3. 用户在微信绑定信用卡/借记卡,已经绑定过的输入密码直接支付:

WooCommerce 微信支付

 

在上图中,由于微信是以商品作为交易对象的,而WooCommerce是以订单作为交易对象的,所以,只能讲订单名称以及订单号(上例中是2617)作为商品名称。

4. 同步返回(下例中同步返回到网站前台->我的账户页面,显示订单列表):

WooCommerce 微信支付网关

5. 异步验证,这个是采用经过验证的微信返回数据来验证支付有效性并改变订单状态为Processing的:

WooCommerce 微信支付 异步验证

 

6. 支持退款操作

先支付一个订单2629:

WooCommerce 微信支付 新订单

 

同步跳转到网站前台页面,处理异步通知,验证微信支付有效后,该订单状态为处理中:

WooCommerce 微信支付 订单处理中

管理员可在后台给这个订单退款:

选中“已退款(Refunded)”选项,保存订单:

WooCommerce 微信支付 退款操作

 

保存订单后,可见微信支付的退款操作结果:

WooCommerce 微信支付 退款操作后

 

这个订单相关的顾客会收到微信支付的退款通知,示例如下:

WooCommerxe 微信支付 退款通知

 

扩展插件

WeixinPay for WooCommerce Add-on 为上述 WooCommerce 支付网关的扩展插件,主要为了将订单信息通过微信即时下发给相应顾客,并支持与经过修改的 WeChat Subscribers Lite 结合,响应用户对订单的查询。

详情见:http://coolwp.com/weixinpay-woocommerce-add.html

相关的微信支付插件

 

WeixinPay for WooCommerce : Native ( WooCommerce 微信扫码支付 )

WeixinPay for WooCommerce: APP ( 和 WooCommerce APP Helper 一起使用,为自制APP添加基于微信开放平台的微信支付功能 )

 

小结

插件主页: WexinPay for WooCommerce ,最新的说明以及文档以插件主页为准。

这算是对去年做了一半的 WeChat payment gateway for WooCommerce 的完成吧。

相关推荐

AliPay QR/Bank for WooCommerce : 支付宝扫码/银行支付;

Alipay WAP for WooCommerce : 支付宝手机网站接口;

 

No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

在使用 Ionic 进行开发时,如果使用 Ionic serve 进行本地测试,你可能会发现服务端没有返回任何数据,并且浏览器的 console中有错误提示: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

 

XMLHttpRequest cannot load http://wp.dev/api/get_recent_posts/?page=1. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8100' is therefore not allowed access.

 

在你折腾完百度(如果你还用百度的话)、又折腾谷歌,来到了这个页面,这个页面会告诉你:很可能是浏览器核心的默认安全策略的问题,其它的不敢说,在命令行中给 Chrome 加上个参数,让它运行,就可以从服务端返回数据了:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --args --disable-web-security

Access-Control-Allow-Origin

与WordPress安全相关的一些建议

WordPress算是最易安装和使用的PHP程序之一,就在不久前,它在全网的使用率达到25% ,并且这个百分比会进一步变大(数据源:看这里)。

这意味着 WordPress 至少对开发者或使用者是友好的,不幸的是,这同样意味着 WordPress 是众多心怀不轨的黑客心目中的一个大蛋糕,可是,开发者或使用者可以通过通过听取以下几个建议让自己的 WordPress 实例更安全。

安全第一

像许多程序一样,WordPress 最大的安全威胁并非其自身代码或者服务器,而是与之交互的用户。

1.密码要够强壮

这里说的密码至少涵盖:服务器的SSH密码(如果你清楚的知道自己并没有SSH密码的话,可以忽略)、 FTP密码、MySQL密码、WordPress 管理员密码,它们要做够强壮。

WordPress 自 v3.7 版本起,已采用了一个基于Dropbox 的 zxcvbn 库的  密码强度指示器 ,这个工具能让你显而易见的知道自己的 WordPress 管理员密码的强壮度,但这是不够的,你还要同样重视上面提到的其它几个密码的强壮度。

2.使用密码管理工具

一个安全的密码应该是唯一的,也就是说,你最好不要在多个应用/网站上使用它,它应该仅仅用在一个地方: WordPress 管理员密码就是 WordPress 管理员密码,而不应该再被用在它处了,那么问题来了:密码要很强壮,那么它就很复杂并且很长,密码要是唯一的,那么,就会有许多密码,怎么办?答案是:你应该使用一个密码管理工具。

如果你经常使用 Windows 平台,你可以使用 KeePass ,这是一个开源软件,并且有简体中文包;如果你使用 Mac/Mac Book ,那么,你可以选择  1Password 或者 Lastpass 。

3.使用HTTPS

如果您的网站还未采用SSL,那么,它应该采用SSL。

你对网站的每一次访问,都会发送一个含有cookie的请求到网站服务器,如果某人要拦截这个请求,他们可以使用相同的 cookie 来冒充是你来做一些见不得光的不法勾当。

在服务器上安装SSL证书的代价并不像国内那些卖SSL证书的网站的标价那样吓人,许多主机商会以很优惠的价格出售SSL证书,安装此证书并正确设置了您的服务器环境( Nginx/Apache )之后,浏览器与您的服务器之间的通信/交互时加密的,也就是说,对这些通信/交互的拦截行为在大多数情况下都是无意义的了。

4.不要信任任何人

在保障了浏览器/客户端与您的网站服务器之间的通信时安全的前提下,该考虑下是谁在使用包括浏览器在内的客户端与您的网站通信了。

江湖险恶,你懂的,虽然我们应该相信大多数访客都是善良的,但是不能排除就有那么一小撮居心不良的人尝试以各种方法搞定您的网站,如果您对自己的网站持呵呵态度的话,看到这儿,您就可以关闭这个页面,该干啥干啥去了。

用户管理

上述建议可以说是泛泛而论,几乎适用于任何在线服务,以下是针对 WordPress 的具体安全建议。

5.一种用户,一个角色

一个常见的 WordPress 管理错误是在一个 WordPress 网站上干不同事儿的人,在使用一个用户账户 — 这个账户可能是在 WordPress 被安装时创建的,并且用户并还很可能是 admin (这得有多糟糕,建议你还是将其改为尽量臭长无意义一些更好),这样真的不好。

WordPress 内置了复杂精巧的角色和权限管理系统 ,您完全可以为不同的干不同事情的同事们每人分配一个用户账户,并且制定特定的角色。

长话短说,除非您需要修改管理员设置,否则不要使用管理员账户。

内置的“投稿者”这个角色用于创建内容(其创建的内容并不会即时发布);

内置的“作者”这个角色用于创建和发布内容;

内置的“编辑”这个角色用于创建、发布和修改其它用户发布的内容;

内置的“管理员”这个角色用于管理整个网站的一切

6.自定义用户角色和能力

您应该理解并能正确使用 WordPress 内置的角色与能力系统,这个系统内置的一些角色已经在上面列举了,每个角色都用不同的“能力”或者说权力,并且,您还可以自己创建角色以及与之相对应的“能力”。

举例来说:您在网站后台有个广告管理页面,并且您想仅有“广告管理员”身份的用户可以管理这个页面,可以这么搞:

//adding a custom "Ad Manager" role
function add_role_ad_manager() {
    add_role( 
        'ad-manager', 
        __( 'Ad Manager', 'cwp' ), 
        array( 
            'read'       => true, 
            'manage-ads' => true,
        )
    );
}
add_action( 'init', 'add_role_ad_manager' );

在创建了“广告管理员”这个角色后,就可以在这个广告管理页面的头部添加个判断了,示例如下:

if ( current_user_can( 'manage-ads' ) ) {
    // ... playground for ad manager...
} else {
    wp_die( __( 'WTF!You are not allowed to do this!.', 'cwp' ) );
}

代码安全

WordPress 开发者应遵循一些约定俗称的编码中的最佳实践,主要的原因是:涉及到安全。

7.过滤所有输入

这个是老生常谈了,大家都懂:不要相信任何的用户输入内容,因为用户输入的内容大多数情况下是要出现在查询或者插入之类的SQL语句的。

在 WordPress 的世界里,这意味着任何的 $_GET、$_POST、$_REQUREST 数据/变量都应该被过滤:

// basic filter example.
$integer = absint( $_GET['number'] ); // an integer > 0
$boolean = (bool) $_POST['selected']; // boolean
$title = sanitize_title( $_POST['title'] );      // sanitize a title input
$input = sanitize_textarea( $_POST['content'] ); // sanitize a textarea input

//if the content may contain HTML, pass it through "kses" to "strip evil scripts"
$content = wp_kses_post( $_POST['content'] );

//if you need to whitelist a specific array of tags, instead use wp_kses

$content = wp_kses( $_POST['input'], array(
    'a'      => array(
        'href'  => array(),
        'title' => array(),
    ),
    'br'     => array(),
    'em'     => array(),
    'strong' => array(),
) );

8.验证所有需要输出的数据

同样的,当您需要打印输出到浏览器时,您应该把数据库当做用户,不要相信它给你的东西,将它给你的数据也过滤一遍。

大多数主题作者在主题中输出一篇文章时,可能是这样的:

<article data-id="<?php echo $post->id; ?>">
    <title><?php echo $post->title; ?></title>
    <section>
        <?php echo $post->content; ?>
        <a href="<?php echo $post->permalink; ?>">Read more...</a>
    </section>
</article>

上面的示例看起来没什么不妥,其实不然,下面的这样才是安全的:

<article data-id="<?php echo esc_attr( $post->id ); ?>">
    <title><?php echo esc_html( $post->title ); ?></title>
    <section>
        <?php echo esc_html( $post->content ); ?>
        <a href="<?php echo esc_url( $post->permalink ); ?>">Read more...</a>
    </section>
</article>

善用 WordPress 内置的如下过滤函数,才会更安全:

  • esc_attr() 过滤 HTML attributes
  • esc_html() 过滤 HTML 内容
  • esc_url() 过滤 URL
  • esc_js() 过滤传递给 JavaScript 的值
  • esc_textarea() 过滤传递给 textarea 的值

更多数据验证函数的列表: WordPress Codex.

9.及时更新

当有重要的安全更新时, WordPress 可以自动更新 (自v3.7起),以保护您的网站,但并非全部需要更新的东西:WordPress 核心、主题、插件都是可以自动更新的,通常是会在网站后台给你一个更新提示,当你看到那个或者那些提示时,就应该在备份网站数据库后进行更新了。

当然了,及时更新并非仅包括 WordPress或者其主题、插件,还包括其运行环境:PHP版本是否过时?OpenSSL是否有新的补丁了?您使用的Nginx是否是最新的稳定版本?您使用的MySQL是否有安全威胁?

10.及时备份

这个算是后补的招数吧:当前面所有的建议你都做了,或者有哪些建议您没有做,导致网站被干掉,您可以先通过备份及时恢复在线业务,再通过分析服务器的日志来查找原因,以查漏补缺。

结论

以上所有所说的与 WordPress 安全相关的内容 对那些自以为“我只差一个程序员”的网站经营者或管理者是无效的,因为他们不知道什么是安全,更不了解 WordPress,总以为 WordPress 是免费的,它就得什么都给我做好,这种想法是错误的。本文首发索凌网络,转载请保留原始链接。

基于 WordPress REST API 和Ionic的APP

移动互联网算是一次革命,但是任何革命都不是要彻底打碎旧世界的,所以,桌面端的WEB还是有存在的理由和必要的, WordPress 可以通过扩展满足桌面端、微信端和APP端的需求,本文记录如何使用Ionic和WordPress + REST API生成自定义APP。

准备

计算机需要安装ionic以及其依赖,网站服务端需安装 REST API插件(在其进入到WordPress核心之前,是需要安装的),由于REST API插件的某些不足,需要自定义其扩展。

步骤

ionic start a0

在上一步骤中,a0为项目目录,可根据实际需要命名;

ionic platform add android

在上一步骤中,添加对安卓平台的支持,可在MAC/MAC BOOK上使用如下命令添加对IOS平台的支持:

ionic platform add ios

可使用

cordova platform list

查看支持的平台/系统。

接下来就是编写js/css/html了,重点是WordPress REST API 与 自定义的 AngularJS 服务之间的数据衔接。

在编写过程中,可使用:

ionic serve

在自己的浏览器上预览APP的大致效果并可在console中输出调试数据。

编写之后,使用命令:

ionic build android

创建安卓平台上的未签名app:

WordPress REST API IONIC

实际运行效果如下:

WordPress REST IONIC APP

这是实验品,所以就不用喷它多丑了。

APP的基本结构

没有定式,下面只是推荐的结构:

WordPress REST IONIC APP

service.js:自定义的服务;

filter:自定义的过滤器,用于信任HTML;

controllers.js:控制器;

config.js:配置文件;

app.js:引导文件。

templates目录下的html文件为APP的页面模板。