我的开发环境:
1.windows 10 操作系统
2.MyEclipse 2014 开发工具
3.微信公众号(服务号)
4.一个一级域名 + 腾讯云租的最低配服务器
最重要的支付步骤:
1.生成商户订单
首先使用Map来存储一些生成订单的数据。
(1). 公众号ID (key="appid")
(2). 商品信息 (key="body")
(3). 设备号 (key="device_info")
(4). 币种 (key="fee_type")
(5). 商户号ID (key="mch_id")
(6). 随机字符串 (key="nonce_str")
(7). 回调URL (统一下单后用来接受微信服务器发来的信息的地址)(key="notify_url")
(8). 用户唯一识别码 (五分钟有效,可以通过刷新微信内置浏览器来重新获取)(key="open_id")
(9). 商户订单号 (key="out_trade_no")
(10). 客户端IP (key="spbill_create_ip")
(11). 支付方式 (key="trade_type") 有多种选择,具体可以观看文档
(12). 金额 (key="totle_fee") 单位:分。
(13). 签名 (key="sign")
注: 1>.openid的获取过程:
用户通过点击公众号菜单通过授权的形式跳转网页
跳转成功后,后台会接收到code参数
通过code获取openid,方式发送code请求到
https://api.weixin.qq.com/sns/oauth2/access_token
?appid=APPID
&code=CODE
&grant_type=authorization_code
正确时返回的JSON数据包如下:
{ "access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE" }
公众号菜单跳转网页的链接格式应为:
https://open.weixin.qq.com/connect/oauth2/authorize
?appid=APPID
&redirect_uri=REDIRECT_URI
&response_type=code
&scope=SCOPE
&state=STATE
#wechat_redirect
2>.sign的生成方式为,将上述(1)-(12)项的内容,以Map形式进行MD5/HMACSHA256加密,官方demo中有具体的加密方法。很实用。
2.通过统一下单来获取prepay_id.
3.将获取到的prepay_id与其他几个参数一起返回JSAPI的调用界面
参数如下
appid
prepar_id
timeStamp(时间戳获取方法在官方demo中有)
nonce_str
paySign(签名)
paySign的获取方式:
将包含
appid
package
timeStamp
nonce_str
signType
的Map数据进行md5加密后的值就是paySign
JSAPI界面内容(我是在一个单独JSP中显示)
<script>
function onBridgeReady() {
WeixinJSBridge.invoke('getBrandWCPayRequest', {
"appId" : appId,
"timeStamp" : timeStamp,
"nonceStr" : nonceStr,
"package" : prepayId,
"signType" : "MD5",
"paySign" : paySign
}, function(res) {
console.log(res)
if (res.err_msg == "get_brand_wcpay_request:ok") {
alert("支付完成");
//支付完成不一定代表支付成功···,通过回调URL中获取的数据判断是否支付成功
} else {
alert("支付取消");
}
});
}
$(document).ready(
function() {
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady',
onBridgeReady, false);
console.log(1);
} else if (document.attachEvent) {
console.log(3);
document.attachEvent('WeixinJSBridgeReady',
onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady',
onBridgeReady);
}
} else {
console.log(2);
onBridgeReady();
}
});
附上两个用到的官方文档地址
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842