Magento 微信支付

Magento 微信支付

根据前面几节介绍的微信支付分析这里大致介绍一下magento中微信支付功能的编写思路,用户可以选择微信支付(JsApi)也可以选择微信扫码支付(Native).

首先在magento 的app/code/local 下创建模块 并在 module设置active 为true

大致目录结构如图

编写 etc/system.xml 为后台配置模块

可以将微信支付所需要的 appid appsecret mchid 和 key等信息配置到这里。这样在后台启用这个模块就会在前台支付过程中显示这个支付方式了。

当我们点击确认支付的时候 其实是调用了相关支付方式Model中的

getOrderPlaceRedirectUrl() 函数。我们可以在这个函数中设定下一步要走的流程。

例如:

public function getOrderPlaceRedirectUrl()
    {
        return Mage::getUrl(‘wxpay/wxselect‘);
    }

即调用 WxselectController.php 中的indexAction()方法,一般其它支付是直接跳转到相应的PaymentController.php 中的redirectAction() 方法,这里这么做的目的是展示给用户一个选择支付方式的页面。因为如果用户在PC端打开或者在移动浏览器中打开是不能使用微信JsApi支付的,(即使在微信中还可能存在跨号支付的问题)所以同时展示出来微信扫码支付的支付方式,当然你可以在代码上通过判断智能的实现支付方式的选择。

在选择页面用户选择了支付方式后,跳转到 PaymentController.php中的indexAction() 方法中。

核心代码如下:

$order = $this->getOrder();
if (!$order->getId())
{
    $this->norouteAction();
    return;
}

$order->addStatusToHistory(
    $order->getStatus(),
    Mage::helper(‘customer‘)->__(‘微信支付‘)
);

$order->save();

$this->getResponse()
    ->setBody($this->getLayout()
        ->createBlock(‘wxpay/redirect‘)
        ->setOrder($order)
        ->toHtml());

程序实例化 Block 展示微信支付页面。在Block 中获取order

$order = $this->getOrder();

JsApi 所需要的参数 通过Model 获取

$jsApiParameters = $model->createPackageInfo($order,$currentUrl);

如果是Native 方式则代码为:

$urlParam = $model->createPackageInfoNative($order);

因为微信支付需要设定支付发起的目录(具体可参见前面的微信支付相关文章)并且只有在这个目录下支付才能生效。

而magento(很多mvc 框架都是)是通过router形式运行的。我大致测试了一下设定支付目录就是 controller下的一个方法,支付没有成功,也可能我编写的有不对的地方,总之没有继续深究,而是干脆把支付放到了magento 根目录下的自定义目录下,例如是wxp目录。

这时候要做的操作就是微信支付所需要的参数 以get形式传递给相应的支付发起文件就可以了。(get形式就可以了,看了应该下没有什么需要保密的内容,有建议欢迎指出。)

例如 jsapi方式那么直接创建文件 jsapi.php

部分代码:

<?php
$jsApiParameters=$_GET[‘jsApiParameters‘]
?>

然后将参数传给 js 就可以了

同理 native.php

最后就是 编写 notify 函数,我设定的notify都是通知给 PaymentController.php中的notifyAction()方法

部分代码:

$notify = new PayNotifyCallBack();
$resCheck = $notify->Handle(false);
if($resCheck){
// 验证签名等成功
$xmlBackData = $GLOBALS[‘HTTP_RAW_POST_DATA‘];
$array_data = json_decode(json_encode(simplexml_load_string($xmlBackData, ‘SimpleXMLElement‘, LIBXML_NOCDATA)), true);
$out_trade_no = $array_data[‘out_trade_no‘];
$model = Mage::getModel(‘wxpay/payment‘);
$order = Mage::getModel(‘sales/order‘)->loadByIncrementId($out_trade_no);
// 获取到了order 那么此时就可以对这个order 做状态更改了

大致思路就是这样,这是第一次使用CSDN 的MarkDown 编辑器编写的使用起来还不错 ╭(′▽`)╯

时间: 2024-10-12 12:31:00

Magento 微信支付的相关文章

Magento微信支付接口开发小记

姗姗来迟的Magento微信支付接口插件 半年之前,有朋友网站需要接入微信支付,是Magento站,于是花费了近二周时间,研究微信开发文档.示例代码,并初步制作了个支付模块,不巧的是,朋友的微信支付接口账户没申请成功,这麻烦了,没实际账户测试,于是去微信开发平台准备申请个测试接口账户.遗憾的是这微信搞的东西太复杂,申请个测试账户也没下来,于是就耽搁了. 九月份的时候,上海一客户的网站购买了我们的支付宝模块,感觉很是满意,后来又问是否有微信的支付模块,客户的微信支付接口早已申请下来了,于是把之前开

微信支付PHP SDK —— 公众号支付代码详解

在微信支付 开发者文档页面 下载最新的 php SDK http://mch.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 这里假设你已经申请完微信支付 1. 微信后台配置  如图 我们先进行测试,所以先把测试授权目录和 测试白名单添加上.测试授权目录是你要发起微信请求的哪个文件所在的目录. 例如jsapi 发起请求一般是jsapi.php所在目录 为测试目录,测试白名单即开发人员的微信号. 正式的支付授权目录不能和测试的一样否则会报错.不填

微信支付之JSAPI公众号支付

前提 本教程默认以下几点你已经完全满足: 开通了认证后的服务号 服务号开通的微信支付的认证 腾讯给你的邮件中有商户登录的账号和密码 拥有一个可供上传代码和设置回调域名的网站或云服务 有一点点php知识. 第一步:公众号设置 1. 你的公众号,在支付认证的标签下, 内容应该和下图类似.证明公众号已经完成了认证和合约的签署. 2. 然后在微信支付–开发配置中,设置测试授权目录和测试白名单 3. 在公众号设置-功能设置标签中,设置JS接口安全域名,这个域名在认证获取token的过程中可能会用到.但具体

微信支付错误两个问题的解决:curl出错,错误码:60

如下是运行微信支付测试代码时出错代码: Warning: curl_setopt() expects parameter 2 to be long, string given in D:\wwwroot\weixinpaytest\pay\WxPay.JsApiPay.php on line 99 Fatal error: Uncaught exception 'WxPayException' with message 'curl出错,错误码:60' in D:\wwwroot\weixinpa

H5版如何在微信外(非微信浏览器)进行微信支付技术方案

官方是支持在非微信内置浏览器中调起微信支付的!H5支付是基于公众号基础开发的一种非微信内浏览器支付方式(需要单独申请支付权限),可以满足在微信外的手机H5页面进行微信支付的需求.同时,由于H5链接传播十分方便.来源不易追踪,商户需要特别注意做好防钓鱼.防刷单的处理,控制风险. 流程原理 接口说明 (1)用户打开商户H5网页选购商品,生成支付订单:(2)商户调用[统一下单]接口(接口中trade_type需定义为WAP),获得预支付交易会话标识prepayid:(3)商户按照微信H5支付协议生成d

微信公众号可通过现金红包接口发放微信支付现金红包(附开发教程)

农历新年将至,支付宝红包打了一仗,微信在朋友圈屏蔽了它的分享,但单防守还不行,进攻才是最好的防守.昨日,微信支付现金红包接口正式开放,只需开通微信支付,即可接入现金红包.微信公众号也可以发放现金红包了! 通过现金红包接口,公众号开发者可以策划相关运营活动,向用户发放微信支付现金红包,更好的达到品牌推广及回馈用户的效果. 1.商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,这样的方式,允许商户灵活的应用于各种各样丰富的活动场景 2.领取到红包后,用户的资金直接进入微信零钱,避免繁复的领

微信支付

后台 public ActionResult WxAddVoucher_Center(double money) { int money= int.Parse((money * 100).ToString()); String ip = Request.UserHostAddress; //随机商品ID String id = ""; Random rd = new Random(); for (int i = 1; i < 16; i++) { id += (rd.Next(0

Unity3d接入微信支付sdk返回-1

背景:U3d导出安卓项目包之后,进行SDK的接入工作. 由于习惯性的右键->Run As->Android Application生成安卓包,导致没有对apk进行签名.App装入之后,微信支付老是返回-1,翻来覆去的找问题终于找到正确的操作流程: 之后,点击finish即可.

C#开发微信支付之企业向用户付款

1.企业付款的介绍 所谓企业付款指的是,在功能开放后诸如保险行业的客户理赔.退保.商品退款.发放征集活动奖金.抽奖互动等操作都可以通过企业付款完成.而此前,微信支付只能提供客户向企业单向付款. 商户如果需要给用户付款,可以直接将钱打入用户的"微信零钱"中,微信支付将做零钱入账消息通知,零钱收支明细会展示相应记录.针对无零钱账户的历史客户端版本,资金将进入用户的红包账户,微信支付无消息通知用户,企业可选择自行触达用户. 通过认证的企业号可以开通微信支付功能.通过认证的企业号可以管理平台的