支付接口 - 微信,支付寶

在hbuider下的app 調用支付接口

支付寶功能申請

 

    1. 登陸支付寶帳號,簽約申請「移動快捷支付」功能,操做流程參考:
      支付寶幫助中心

 

    1. 獲取PID,參考教程:
      獲取合做者身份ID

 

    1. 生成密鑰(公鑰和私鑰),並提交到支付寶,參考教程:
      生成RSA密鑰
      上傳公鑰

 

服務器生成訂單示例(PHP)
參考開源示例代碼github-支付寶
C#生成支付寶訂單示例php

微信支付功能申請

 

    1. 使用微信支付功能需到微信開放平臺申請移動應用並開通支付功能
      微信APP支付接入商戶服務中心
      申請應用後能夠獲取AppID和AppSecret值。html

 

    1. 開通支付功能後可獲取支付業務服務器配置數據
      PARTNER:財付通商戶號
      PARTNER_KEY:財付通密鑰
      PAYSIGNKEY:支付簽名密鑰git

 

參考開源示例代碼github-微信支付github

 

       $result = array(
            'appid' => $appid,
            'noncestr'=>$parameters['nonce_str'],
            'package'=>'Sign=WXPay',
            'partnerid'=>$mch_id,
            'prepayid'=>$prepay_id,
            'timestamp'=> time(),
        );
        // 從新簽名
        $result['sign'] = $this->getSign($result, $key);

  

調起啓用支付寶或微信 plus.payment.request(pay[id].order,function(result)

微信遇到的問題: 啓動微信(須要打包測試,其中app簽名確保和微信簽名對應),確保獲取order的值是否正確,其中,注意sigh=兩次從新生成,格式爲order
字段名 變量名 類型 必填 示例值 描述
應用ID appid String(32) wx8888888888888888 微信開放平臺審覈經過的應用APPID
商戶號 partnerid String(32) 1900000109 微信支付分配的商戶號
預支付交易會話ID prepayid String(32) WX1217752501201407033233368018 微信返回的支付交易會話ID
擴展字段 package String(128) Sign=WXPay 暫填寫固定值Sign=WXPay
隨機字符串 noncestr String(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 隨機字符串,不長於32位。推薦隨機數生成算法
時間戳 timestamp String(10) 1412000000 時間戳,請見接口規則-參數規定
簽名 sign String(32) C380BEC2BFD727A4B6845133519F3AD6 簽名,詳見簽名生成算法

支付寶:主要密鑰是否正確 出現al59錯誤->確保每個值都不爲空ajax

其中order格式算法

"service=\"mobile.securitypay.pay\"&partner=\"2088002409047871\"&_input_charset=\"UTF-8\"&out_trade_no=\"14682865347699\"&subject=\"餘額充值\"&payment_type=\"1\"&seller_id=\"tfshop@126.com\"&total_fee=\"0\"&body=\"\"&it_b_pay=\"1d\"&notify_url=\"http%3A%2F%2Fwww.taifengmall.com%2Fopenapi%2Fectools_payment%2Fparse%2Fectools_payment_plugin_alipayapp%2Fcallback%2F\"&sign=\"GGxRnW%2FxgYmf582zggZCZFw%2FY1nhHJRptUzHIqCT9SvsJxs4bcoOzo4cEoBkyFultEr2CowQEGAgradEtTrsZI9TSK3Rv0IheBS0EP28cSqZYOQH%2BLXqsmzI2nZiJ%2BYYD0zFcS45yzYAEn4ll8Fx4subACEzLzIM%2BBxYwHcp43g%3D\"&sign_type=\"RSA\""
遇到的問題:body爲空,total_fee爲0 api

遇到的寫法js寫法:服務器

$('body').on('ajaxSubmit.success', '#paycenter-form', function (e, data){
var paytype_id = $('input[name=payment]:checked').val();
$.payment($.paymentmapping[paytype_id], data, function (result){...}});
    $.payment = function (type, data, successCallback, failCallback){

// 支付方式名稱轉換,服務端與客戶端的映射
$.paymentmapping = {
'wxpayapp': 'wxpay',
'alipayapp': 'alipay'
};
})(jQuery);
參考文檔

支付結果返回處理

支付寶微信

$this->callback_url = kernel::openapi_url('openapi.ectools_payment/parse/ectools/ectools_payment_plugin_alipayapp', 'callback');

public function dopay($payment) { $mer_id = trim($this->getConf('mer_id', __CLASS__)); // 支付寶合做者身份ID,以2088開頭的16位純數字 $seller_id = trim($this->getConf('seller_id', __CLASS__)); // 支付寶帳號 $rsa_private_key = trim($this->getConf('rsa_private_key', __CLASS__)); // 私鑰字符串 $this->add_field('service', 'mobile.securitypay.pay'); // 必填,接口名稱,固定值 $this->add_field('partner', $mer_id); // 必填,合做商戶號 $this->add_field('_input_charset', 'UTF-8'); // 必填,參數編碼字符集 $this->add_field('out_trade_no', $payment['payment_id']); // 必填,商戶網站惟一訂單號 $this->add_field('subject', $payment['shopName']); // 必填,商品名稱 $this->add_field('payment_type', '1'); // 必填,支付類型 $this->add_field('seller_id', $seller_id); // 必填,賣家支付寶帳號 $this->add_field('total_fee', floatval($payment['total_amount'])); // 必填,總金額,取值範圍爲[0.01,100000000.00] $this->add_field('body', $payment['body']); // 必填,商品詳情 $this->add_field('it_b_pay', '1d'); // 可選,未付款交易的超時時間 $this->add_field('notify_url',urlencode($this->callback_url)); // 可選,服務器異步通知頁面路徑 if($payment['show_url']){ $this->add_field('show_url', urlencode($payment['show_url'])); // 可選,商品展現網站 } //生成訂單 return $this->generate(trim($rsa_private_key)); } /** * 支付後返回後處理的事件的動做 * @params array - 全部返回的參數,包括POST和GET * @return null */ public function callback(&$recv) { $mer_id = trim($this->getConf('mer_id', __CLASS__)); // 支付寶合做者身份ID,以2088開頭的16位純數字 if($this->is_return_vaild($recv, $recv['sign'])){ $ret['payment_id'] = $recv['out_trade_no']; $ret['account'] = $mer_id; $ret['bank'] = app::get('ectools')->_('支付寶支付移動版'); $ret['pay_account'] = app::get('ectools')->_('付款賬號'); $ret['currency'] = 'CNY'; $ret['money'] = $recv['total_fee']; $ret['paycost'] = '0.000'; $ret['cur_money'] = $recv['total_fee']; $ret['trade_no'] = $recv['trade_no']; $ret['t_payed'] = strtotime($recv['notify_time']) ? strtotime($recv['notify_time']) : time(); $ret['pay_app_id'] = "alipayapp"; $ret['pay_type'] = 'online'; $ret['memo'] = $recv['body']; switch($recv['trade_status']){ case 'TRADE_SUCCESS': $ret['status'] = 'succ'; echo 'success'; break; } }else{ $message = 'Invalid Sign'; $ret['status'] = 'invalid'; echo 'fail'; } return $ret; }

notify_url 接口異步通知urlapp

 

http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/71

我的總結,遇到問題,先看例子的返回值是怎樣的,而後對比一下,記得看清楚,每一步的做用,一步一步解決
微信掃碼支付:模式2
微信支付官方DEMO下載微信支付商戶平臺https://pay.weixin.qq.com/wiki/doc/api/index.html
相關文章
相關標籤/搜索