Magento 微信支付,Magento信支付

來源:互聯網
上載者:User

Magento 支付,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 編輯器編寫的使用起來還不錯 ╭(′▽`)╯

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.