公众号支付有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;
