1. 程式人生 > >微信支付----沒我想的那麼難!

微信支付----沒我想的那麼難!

歡迎訪問我的技術群425783133

因現版微信支付沒有paysignkey引數,故該文章不適用於現版微信,請知悉。

 樓主公司是做微信周邊產品開發的,最近公司接到一個case,跟客戶公司介面對接,並實現微信支付。樓主可是從沒接觸過微信支付,當時心裡感覺好高大上,能搞定麼?馬上忽悠來客戶的公眾平臺帳號、密碼上去看微信支付文件。

  公眾號支付有2種支付方式:

  JS API 支付:是指使用者開啟圖文訊息或者掃描二維碼,在微信內建瀏覽器開啟網頁進行的支付。商戶網頁前端通過使用微信提供的 JS API,呼叫微信支付模組。這種方式,適合
需要在商戶網頁進行選購下單的購買流程。
  Native(原生)支付:是指商戶組成符合 Native(原生)支付規則的 URL 連結,使用者可通過點選該連結或者掃描對應的二維碼直接進入微信支付模組(微信客戶端介面),即可
進行支付。這種方式,適合無需選購直接支付的購買流程。

  以上兩種方式最大的區別是:是否需要經過網頁呼叫!

  互動原理:

  

      客戶是想做一個手機端的商城,所以選擇JS API支付,通過網頁調取微信支付。。

      樓主第一次看過文件後,什麼“支付簽名(paySign)”啊,什麼“package包”啊等等一些引數,反正似懂非懂的樣子。樓主這人比較懶,不然也不會註冊3年了,也就寫了這麼篇不入流的文章,樓主想啊像這些個大公司開放個啥介面的肯定會有demo。樓主的運氣還真不錯(PS:樓主可是為福利事業貢獻了不少哦,咋就沒這運氣?),還真讓樓主找到了,那心情肯定是比不上中500W的,嘿嘿。

複製程式碼
<!DOCTYPE html>
<html>
    <head>
        <title>公眾號支付測試網頁</title>
        <script language="javascript" src="http://res.mail.qq.com/mmr/static/lib/js/jquery.js"></script>
        <script language="javascript" src="http://res.mail.qq.com/mmr/static/lib/js/lazyloadv3.js"
></script> <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/md5.js"></script> <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/sha1.js"></script> <script Language="javascript"> //輔助函式 function Trim(str,is_global) { var result; result = str.replace(/(^\s+)|(\s+$)/g,""); if(is_global.toLowerCase()=="g") result = result.replace(/\s/g,""); return result; } function clearBr(key) { key = Trim(key,"g"); key = key.replace(/<\/?.+?>/g,""); key = key.replace(/[\r\n]/g, ""); return key; } //獲取隨機數 function getANumber() { var date = new Date(); var times1970 = date.getTime(); var times = date.getDate() + "" + date.getHours() + "" + date.getMinutes() + "" + date.getSeconds(); var encrypt = times * times1970; if(arguments.length == 1){ return arguments[0] + encrypt; }else{ return encrypt; } } //以下是package組包過程: var oldPackageString;//記住package,方便最後進行整體簽名時取用 function getPartnerId() { return document.form1.partnerId.value; } function getPartnerKey() { return "8934e7d15453e97507ef794cf7b0519d"; } function getPackage() { var banktype = "WX"; var body = document.form1.body.value;//商品名稱資訊,這裡由測試網頁填入。 var fee_type = "1";//費用型別,這裡1為預設的人民幣 var input_charset = "GBK";//字符集,這裡將統一使用GBK var notify_url = "http://www.qq.com";//支付成功後將通知該地址 var out_trade_no = ""+getANumber();//訂單號,商戶需要保證該欄位對於本商戶的唯一性 var partner = getPartnerId();//測試商戶號 var spbill_create_ip = "127.0.0.1";//使用者瀏覽器的ip,這個需要在前端獲取。這裡使用127.0.0.1測試值 var total_fee = document.form1.totalFee.value;//總金額。 var partnerKey = getPartnerKey();//這個值和以上其他值不一樣是:簽名需要它,而最後組成的傳輸字串不能含有它。這個key是需要商戶好好儲存的。 //首先第一步:對原串進行簽名,注意這裡不要對任何欄位進行編碼。這裡是將引數按照key=value進行字典排序後組成下面的字串,在這個字串最後拼接上key=XXXX。由於這裡的欄位固定,因此只需要按照這個順序進行排序即可。 var signString = "bank_type="+banktype+"&body="+body+"&fee_type="+fee_type+"&input_charset="+input_charset+"&notify_url="+notify_url+"&out_trade_no="+out_trade_no+"&partner="+partner+"&spbill_create_ip="+spbill_create_ip+"&total_fee="+total_fee+"&key="+partnerKey; var md5SignValue = ("" + CryptoJS.MD5(signString)).toUpperCase(); //然後第二步,對每個引數進行url轉碼,如果您的程式是用js,那麼需要使用encodeURIComponent函式進行編碼。 banktype = encodeURIComponent(banktype); body=encodeURIComponent(body); fee_type=encodeURIComponent(fee_type); input_charset = encodeURIComponent(input_charset); notify_url = encodeURIComponent(notify_url); out_trade_no = encodeURIComponent(out_trade_no); partner = encodeURIComponent(partner); spbill_create_ip = encodeURIComponent(spbill_create_ip); total_fee = encodeURIComponent(total_fee); //然後進行最後一步,這裡按照key=value除了sign外進行字典序排序後組成下列的字串,最後再串接sign=value var completeString = "bank_type="+banktype+"&body="+body+"&fee_type="+fee_type+"&input_charset="+input_charset+"&notify_url="+notify_url+"&out_trade_no="+out_trade_no+"&partner="+partner+"&spbill_create_ip="+spbill_create_ip+"&total_fee="+total_fee; completeString = completeString + "&sign="+md5SignValue; oldPackageString = completeString;//記住package,方便最後進行整體簽名時取用 return completeString; } //下面是app進行簽名的操作: var oldTimeStamp ;//記住timestamp,避免簽名時的timestamp與傳入的timestamp時不一致 var oldNonceStr ; //記住nonceStr,避免簽名時的nonceStr與傳入的nonceStr不一致 function getAppId() { return document.form1.appId.value; } function getAppKey() { return "2Wozy2aksie1puXUBpWD8oZxiD1DfQuEaiC7KcRATv1Ino3mdopKaPGQQ7TtkNySuAmCaDCrw4xhPY5qKTBl7Fzm0RgR3c0WaVYIXZARsxzHV2x7iwPPzOz94dnwPWSn"; } function getTimeStamp() { var timestamp=new Date().getTime(); var timestampstring = timestamp.toString();//一定要轉換字串 oldTimeStamp = timestampstring; return timestampstring; } function getNonceStr() { var $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; var maxPos = $chars.length; var noceStr = ""; for (i = 0; i < 32; i++) { noceStr += $chars.charAt(Math.floor(Math.random() * maxPos)); } oldNonceStr = noceStr; return noceStr; } function getSignType() { return "SHA1"; } function getSign() { var app_id = getAppId().toString(); var app_key = getAppKey().toString(); var nonce_str = oldNonceStr; var package_string = oldPackageString; var time_stamp = oldTimeStamp; //第一步,對所有需要傳入的引數加上appkey作一次key=value字典序的排序 var keyvaluestring = "appid="+app_id+"&appkey="+app_key+"&noncestr="+nonce_str+"&package="+package_string+"&timestamp="+time_stamp; sign = CryptoJS.SHA1(keyvaluestring).toString(); return sign; } </script> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> <meta id="viewport" name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1; user-scalable=no;" /> <style> body { margin:0;padding:0;background:#eae9e6; } body,p,table,td,th { font-size:14px;font-family:helvetica,Arial,Tahoma; } h1 { font-family:Baskerville,HelveticaNeue-Bold,helvetica,Arial,Tahoma; } a { text-decoration:none;color:

相關推薦

支付----那麼

歡迎訪問我的技術群425783133 因現版微信支付沒有paysignkey引數,故該文章不適用於現版微信,請知悉。  樓主公司是做微信周邊產品開發的,最近公司接到一個case,跟客戶公司介面對接,並實現微信支付。樓主可是從沒接觸過微信支付,當時心

android中支付 其實那麼

最近這段時間在做微信支付,把一些開發的流程及遇到的一些問題記錄下來,以後遇到的話也能做個參考!畢竟剛接觸這個支付的時候也是走了好多彎路。 首先第一步肯定是要去申請你的公眾號,服務號各種的。。。 如果一

大佬為你揭祕支付的系統架構,你知道的都在這裡了

歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~ 本文由李躍森發表於雲+社群專欄 李躍森,騰訊雲PostgreSQL首席架構師,騰訊資料庫團隊架構師,負責微信支付商戶系統核心資料庫的架構設計和研發,PostgreSQL-x2社群核心成員,獲多項國家發明專利。從事PG核心開發和架構設計超過10年

紅黑樹真的那麼

寫本文的原由是昨晚做夢居然夢到了在看原始碼,於是便有了此文...... 雖然標題是關於紅黑樹的,不過此文是結合圖片,通過分析TreeMap的原始碼,讓你理解起來不是那麼枯燥(前方高能,此文圖片眾多,慎入)。 作者 | 馬雲飛 責編 | 胡巍巍

學AI?那麼簡單、但也那麼(內附技術圖譜)

本文作者:智亮 Google Tensorflow框架的Contributor。在計算機視覺領域有深厚的工業經驗,帶領團隊開發的“花伴侶”植物識別App,上線數月即在0推廣的情況下達到百萬使用者,並獲得阿里巴巴2017雲棲大會API Solution大賽一等獎,團隊受邀成為騰訊微信公開課北京站九位

(轉)小程式API——支付詳解(順便講一下遇見的坑)

https://blog.csdn.net/cwh1010714845/article/details/78944335     學習微信小程式已經半個多月了,終於接觸到小程式中一個很重要的功能——微信支付。接下來就給大家詳細講解一下微信支付功能的呼叫。 一想到微信支

iOS- 來和一起搗鼓支付

前言:本篇文章目的在於梳理知識,鞏固思想,學習總結。本人小白一枚,走在學習的路上。有什麼好的建議,都可以留言。互相促進! 總觀,微信支付,也沒心思,好好看文件。文件微微有些亂。感覺,微信demo,內部功能都整合到一塊了,不好查詢。終於,在各種坑下,仔細看了一遍文件,默默的弄完了。 大體方向: 1

Android 支付_掃碼支付來幫你填坑

0.概述: 本文講的是微信支付中的掃碼支付的模式二:該模式下,二維碼連結由微信支付返回給商戶,商戶將得到的二維碼連結轉成二維碼圖片,使用者通過掃碼支付,此方式下生成的二維碼2小時內有效。 微信支付官網地址:https://pay.weixin.qq.com/

支付之掃碼支付開發:遇到的坑及解決辦法(附:Ecshop 支付外掛)

      前段時間幫一個朋友的基於ecshop開發的商城加入微信掃描支付功能,本以為是很簡單的事兒——下載官方sdk或開發幫助文件,按著裡面的做就ok了,誰知折騰了兩三天的時間才算搞定,中間也帶著疑問在網上找了不少技術文章,卻發現都只是比較粗略的寫他們是怎麼開發接入的,並沒有解決我遇到的問題...,唉,有時

H5調起支付功能

需要 con 返回 alert list 訂單 團隊 eve window 第一步:需要後端返回需要的以下參數: 該操作是你提交完訂單信息後在接口所返回的json, 其次將其存儲起來,我用的localStorage var payParams = {

支付開發填坑記之支付

wiki index 傳輸 系統 外網 ttr throw div union 微信支付,支持的支付方式比較多:有掃碼支付,刷卡支付,APP支付和公眾號支付。其中,APP和網站上最常用的就是APP支付和公眾號支付。前者集成在APP中,後者主要是為微信用戶提供了另一種支付方式

iOS支付demo運行報錯解決如下

art llb readme ring -objc override 項目 技術 cep 要接入微信支付的小夥伴,首先要下載一份官方demo(APP微信支付官方Demo下載),然後打開工程,準備大幹一場。 1、編譯報錯 編譯的時候居然直接報錯了(orz) 錯誤提示:

支付錯誤,頁面URL末註冊

net 控制器 index dex 微信 其中 大小寫 ssd 都是 最近在做個項目用到微信支付的JSSDK支付時候碰到“URL末註冊的問題”,可是我已經在公眾平臺裏的支付目錄裏添加了,測試了幾次都是這個問題,最後才發現原來是大小寫的問題,還有我的支

支付寶 采寶支付代理加盟可靠嗎?公司扶持給力輕松加盟

支付代理加盟 移動支付代理加盟 加盟服務商如今互聯網時代,人手一部手機,現金支付方式日漸冷落,取而代之的是手機刷碼支付,移動支付潮流全面興起, 采寶支付加盟可靠嗎?采寶支付在這種背景下全面“侵”入市場,很快獲得矚目,不管是消費者、商家,還是忙著創事業的投資者,都對這個品牌給予大大肯定。 采

采寶聚合支付服務商 +支付寶一站式服務平臺

聚合支付 二維碼支付 移動支付代理 支付寶支付代理服務商 杭州合言信息科技有限公司-發展至今,在支付中,支持各種支付工具,一站式支付服務商家(包括:支付寶、微信支付、中國銀聯)等支付服務,在各大第三方支付平臺僵持不下之際,采寶聚合支付便開始活躍在移動支付市場上。

支付代理加盟 支付寶掃碼支付申請條件

微信支付代理 微信支付加盟 支付寶支付掃碼申請我們先了解一下移動支付收單服務優勢吧? 加入采寶移動支付收單的優勢: 一、收單方式更為的快速,便捷,顧客只要在準備付錢時打開支付寶錢包或微信錢包給收銀員用掃描槍掃一下就完成交易了,不用找零,不用簽字,資金實時到賬,更杜絕了假幣風險。 二、政

支付-公眾號支付,統一下單,調起支付,回調驗證

.net log bsp 問題 常見問題 下單 article 微信 微信支付 參考:http://www.jianshu.com/p/a172a1b69fdd http://www.jianshu.com/p/1ae0ef652f63 http://www.jb51.n

支付寶下線商家收款 支付支付商家

支付寶下線商家收款 收款二維碼 支付寶下線商家收款 簡單來說,它可以用較簡單的方法,幫助中小商家們接入支付寶,快速掃碼,快速支付!與此前打印個人收款二維碼不同,官方收款碼將使商家轉變為簽約商戶,享受向銀行卡提取余額免手續費的優惠。 目前公司發展迅速,簽約商戶已超過10000家。 商

支付寶線下支付商家 開通支付寶商家簽約資料

二維碼支付代理 支付寶線下支付商家 付寶支付代理 微信支付寶商家簽約資料杭州合言信息科技有限公司-專註移動支付領域,二維碼支付代理,支付寶線下支付商家,支付寶支付代理,主要是服務於商戶,商戶和其一次對接之後,能同時支持微信支付,支付寶支付,百度錢包等多個支付渠道,包括支持多種第三方支付平臺、合作銀行及其他服務

支付支付創業好項目 采寶支付誠招合夥人

微信支付代理 支付寶支付代理商 支付寶省級代理 微信支付寶支付創業好項目?移動支付巨大的市場空間有無僅有的創富商機:移動支付在線下支付的春天即將到來”移動支付市場空間支付寶、微信希望用5年時間推動中國率先進入無現金社會。到2020年第三方移動支付市場的交易規模有望突破1000萬億元、如此巨大的支付市場,