服務器生成訂單示例(PHP)
參考開源示例代碼github-支付寶
C#生成支付寶訂單示例php
使用微信支付功能需到微信開放平臺申請移動應用並開通支付功能
微信APP支付接入商戶服務中心
申請應用後能夠獲取AppID和AppSecret值。html
開通支付功能後可獲取支付業務服務器配置數據
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);
字段名 | 變量名 | 類型 | 必填 | 示例值 | 描述 |
---|---|---|---|---|---|
應用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\"¬ify_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