如何在微信公众平台上实现微信小程序支付功能能/微信支付

微信支付申请后如何启用微信支付
微信支付申请成功(跟微信签过合同并缴纳过保证金)之后,需要完成支付测试才可以正式启用,下面为具体操作流程:
1、用您的公众号账号密码进入微信公众平台http://mp./
2、点击【商户功能】【支付测试】
3、测试目录修改为 /wxpay/ 注意后面有斜杠,您的网站域名不是指顶级域名,用什么域名访问就填什么域名
设置好测试目录之后,还要添加测试白名单,就是测试支付用的个人微信号,用谁的个人微信号进去支付就填写谁的,否则测试支付会不成功。
4、在微管家平台的在线支付设置里开启支付,支付方式选择微信支付,然后填写好各项信息,点击保存。
5、在微管家平台的团购里发布一个商品,然后在手机的对应微信公众号里进行购买,并使用微信支付
6、支付成功后进入微管家的管理中心,进入团购订单管理,找到上一步支付过的订单,然后点击【详细】,在下图中设置发货状态为“已发”,快递信息随便填写。然后点击“保存”,会提示同步发货信息到微信,然后提示同步成功。
7、再次进入微信公众平台,点击【服务中心】【商户功能】
8、点击最下面的【发布】
9、点击【下一步】
10、维权功能、告警接口、发货接口都变绿(如果都不变绿,那么要么是您没升级,要么没完全按照以上步骤处理),点击绿色按钮【发布】
11、设置完成,在微管家里发布商品,所有粉丝都可以进行购买并使用微信支付了。java开发微信公众号支付
投稿:hebedich
字体:[ ] 类型:转载 时间:
这篇文章主要给大家结合微信支付接口开发的实践,从获取用户授权到各主要接口的使用方法等方面介绍微信支付的关键点技术,有需要的小伙伴可以参考下
最近做了微信公众号支付的开发,由于是第一次做也摸索了几天的时间,也只是达到了实现功能的水平,并没有太多考虑到性能问题,所以这篇文章比较适合初学者。
&&& 微信公众号支付的总体其实很简单,大致就分为三步。第一步需要获取用户授权;第二步调用统一下单接口获取预支付id;第三步H5调起微信支付的内置的js。下面介绍具体每一步的开发流程。
一&&& 首先要明确微信公众号支付属于网页版支付,所以相较于app的直接调取微信支付要多一步微信授权。也就是需要获取用户的openid。微信公众号使用的交易类型是JSAPI,所以统一下单接口的文档明确的写到
因此我们必须去获取openid,同时也可以处理一些我们需要的逻辑。获取用户授权有两种方式:1.scope=snsapi_2.scope=snsapi_userinfo.我使用的是snsapi_base
Scope为snsapi_base
Scope为snsapi_userinfo
微信的官方文档也有对各个参数的详细说明,我就关键的参数仔细的说明一下。首先appid就不多说了就是你微信公众号的appid固定写死的,redirect_uri这个参数是最重要的,这个地址是访问你处理的接口地址。你可以在这个链接上拼接上你所需要的参数,一般你是要把订单的金额传到这个接口里的,访问这个链接的时候微信会给你code你需要用它去获取openid,记得要对其进行urlencode处理。state参数可以理解为扩展字段,其他的参数都是固定写法就不在多做介绍了。下面是获取openid的代码片段。
//获取openId
HttpClientUtil util = HttpClientUtil.getInstance();
Map&String, String& map = new HashMap&String, String&();
map.put("appid", WxPayConfig.APPID);
map.put("secret", WxPayConfig.APPSECRET);
map.put("code", code);
map.put("grant_type", WxPayConfig.GRANT_TYPE);
String returnStr = util.doPostRetString("https://api./sns/oauth2/access_token", null,map);
("returnStr:[" + returnStr + "]");
AccessToken at = JSON.parseObject(returnStr, AccessToken.class);
AccessToken.java
public class AccessToken {
private String access_
private String expires_
private String refresh_
public String getAccess_token() {
return access_
public void setAccess_token(String access_token) {
this.access_token = access_
public String getExpires_in() {
return expires_
public void setExpires_in(String expires_in) {
this.expires_in = expires_
public String getRefresh_token() {
return refresh_
public void setRefresh_token(String refresh_token) {
this.refresh_token = refresh_
public String getOpenid() {
public void setOpenid(String openid) {
this.openid =
public String getScope() {
public void setScope(String scope) {
this.scope =
public String getUnionid() {
public void setUnionid(String unionid) {
this.unionid =
public String toString() {
return "AccessToken [access_token=" + access_token + ", expires_in="
+ expires_in + ", refresh_token=" + refresh_token + ", openid="
+ openid + ", scope=" + scope + ", unionid=" + unionid + "]";
二&&& 我们获取了openid后,就可以进行下一步的统一下单的开发了。微信上统一下单接口的文档写的比较详细了,具体的参数含义我就不多做介绍了。下面直接贴最直观的代码,特别提醒的是一定要注意签名的正确。签名所使用的key并不是AppSecret而是你申请时自己定义的商户key。
//统一下单
WxPaySendData data = new WxPaySendData();
data.setAppid(WxPayConfig.APPID);
data.setAttach("微信支付");
data.setBody("微信公众号支付");
data.setMch_id(WxPayConfig.MCHID);
data.setNonce_str(nonceStr);
data.setNotify_url(WxPayConfig.NOTIFY_URL);
data.setOut_trade_no(tradeNo);
data.setTotal_fee((int)(fee*100));//单位:分
data.setTrade_type("JSAPI");
data.setSpbill_create_ip(ip);
data.setOpenid(at.getOpenid());
String returnXml = UnifiedorderService.unifiedOrder(data,WxPayConfig.KEY);
WxPayReturnData reData = new WxPayReturnData();
XStream xs1 = new XStream(new DomDriver());
xs1.alias("xml", WxPayReturnData.class);
reData = (WxPayReturnData) xs1.fromXML(returnXml);
UnifiedorderService.java
public class UnifiedorderService {
private final static Logger logger = LoggerFactory.getLogger(UnifiedorderService.class);
public static String unifiedOrder(WxPaySendData data,String key){
//统一下单支付
String returnXml =
//生成sign签名
SortedMap&Object,Object& parameters = new TreeMap&Object,Object&();
parameters.put("appid", data.getAppid());
parameters.put("attach", data.getAttach());
parameters.put("body", data.getBody());
parameters.put("mch_id", data.getMch_id());
parameters.put("nonce_str", data.getNonce_str());
parameters.put("notify_url", data.getNotify_url());
parameters.put("out_trade_no", data.getOut_trade_no());
parameters.put("total_fee", data.getTotal_fee());
parameters.put("trade_type", data.getTrade_type());
parameters.put("spbill_create_ip", data.getSpbill_create_ip());
parameters.put("openid", data.getOpenid());
parameters.put("device_info", data.getDevice_info());
("SIGN:"+WxSign.createSign(parameters,key));
data.setSign(WxSign.createSign(parameters,key));
XStream xs = new XStream(new DomDriver("UTF-8",new XmlFriendlyNameCoder("-_", "_")));
xs.alias("xml", WxPaySendData.class);
String xml = xs.toXML(data);
("统一下单xml为:\n" + xml);
HttpClientUtil util = HttpClientUtil.getInstance();
returnXml = util.doPostForString("https://api.mch./pay/unifiedorder", null, xml);
("返回结果:" + returnXml);
} catch (Exception e) {
e.printStackTrace();
return returnX
public class WxSign {
private static String characterEncoding = "UTF-8";
@SuppressWarnings("rawtypes")
public static String createSign(SortedMap&Object,Object& parameters,String key){
StringBuffer sb = new StringBuffer();
Set es = parameters.entrySet();//所有参与传参的参数按照accsii排序(升序)
Iterator it = es.iterator();
while(it.hasNext()) {
Map.Entry entry = (Map.Entry)it.next();
String k = (String)entry.getKey();
Object v = entry.getValue();
if(null != v && !"".equals(v)
&& !"sign".equals(k) && !"key".equals(k)) {
sb.append(k + "=" + v + "&");
sb.append("key=" + key);
String sign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toUpperCase();
public static String getNonceStr() {
Random random = new Random();
return MD5Util.MD5Encode(String.valueOf(random.nextInt(10000)), "UTF-8");
public static String getTimeStamp() {
return String.valueOf(System.currentTimeMillis() / 1000);
最后要提一下的是NOTIFY_URL回调地址,接收微信支付异步通知回调地址。
三&&& 通过上面的操作我们获得了预支付交易会话标识prepay_id,这样我们就可以进行最后一步的操作了。使用H5调起支付api。
//H5调起支付
attr.addAttribute("appId", reData.getAppid());
attr.addAttribute("timeStamp", WxSign.getTimeStamp());
attr.addAttribute("nonceStr", reData.getNonce_str());
attr.addAttribute("package", "prepay_id="+reData.getPrepay_id());
attr.addAttribute("signType", "MD5");
SortedMap&Object,Object& signMap = new TreeMap&Object,Object&();
signMap.put("appId", reData.getAppid());
signMap.put("timeStamp", WxSign.getTimeStamp());
signMap.put("nonceStr", reData.getNonce_str());
signMap.put("package", "prepay_id="+reData.getPrepay_id());
signMap.put("signType", "MD5");
("PaySIGN:"+WxSign.createSign(signMap,WxPayConfig.KEY));
attr.addAttribute("paySign", WxSign.createSign(signMap,WxPayConfig.KEY));
将需要的参数传给页面后,使用微信提供方法调起支付。
function getUrlParam(name) {
//构造一个含有目标参数的正则表达式对象
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
//匹配目标参数
var r = window.location.search.substr(1).match(reg);
//返回参数值
if (r != null)
return unescape(r[2]);
function onBridgeReady() {
var appId = getUrlParam('appId');
var timeStamp = getUrlParam('timeStamp');
var nonceStr = getUrlParam('nonceStr');
var Package = getUrlParam('package');
var signType = getUrlParam('signType');
var paySign = getUrlParam('paySign');
WeixinJSBridge.invoke('getBrandWCPayRequest', {
"appId" : appId,//"wx0ec43b", //公众号名称,由商户传入
"timeStamp" : timeStamp,//"", //时间戳,自1970年以来的秒数
"nonceStr" : nonceStr,//"e61463f8efacccfbbb444", //随机串
"package" : Package,//"prepay_id=u802345jgfjsdfgsdg888",
"signType" : signType,//"MD5", //微信签名方式:
"paySign" : paySign,//"70EABB79628FBCAFADD89" //微信签名
}, function(res) { // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回
ok,但并不保证它绝对可靠。
//alert(res.err_msg);
if (res.err_msg == "get_brand_wcpay_request:ok") {
alert("支付成功");
if (res.err_msg == "get_brand_wcpay_request:cancel") {
alert("交易取消");
if (res.err_msg == "get_brand_wcpay_request:fail") {
alert("支付失败");
function callPay() {
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', onBridgeReady,
} else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
onBridgeReady();
在返回结果的地方可以自定义一些自己的返回页面。
&&& 总结:由于我也是第一次做,写这篇文章是想记录一下自己的工作成果,和分享给一下也是新手的朋友们可以有一些帮助,最后希望有好的见解朋友可以留言讨论,大家一起学习进步。
以上就是关于java开发微信公众支付的所有内容了,希望大家能够喜欢。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具场景及类型介绍
商家可以申请公众账号支付和APP(应用客户端)支付两种接入微信支付方式。
公众账号支付:用户在微信公众帐号内使用微信支付消费,案例:易迅、QQ充值。
APP(应用客户端)支付:用户在手机应用APP内使用微信支付消费,案例:大众点评、易迅。
公众账号支付:
APP(应用客户端)支付
申请条件/申请资格
申请成为微信支付商家,必须满足三个条件:
(1)拥有微信公众平台()公众号,且为服务号(了解注册公众帐号)。
(2)公众号必须经过微信认证。(了解微信认证)。
(3)目前支持企业、媒体、APP、网店商家类型认证的服务号。
申请方法:
进入申请页面,登陆后,点击&服务&功能栏下的&服务中心&模块,再点击右侧的&商户功能&模块。
简述了解申请步骤,此时需填写&商户基本资料&、&业务审核资料&、&财务审核资料&等资料。
申请所需资料以及步骤提示。
商户基本信息填写
注意事项:
1、目前仅对经营范围之内的商户开放微信支付申请权限,经营范围之外的商户请后续留意。
2、填写的商品内容将作为日后运营监管的依据。
申请所需资料以及步骤提示
业务审核资料填写
注意事项:
1、商户资料需要与认证的商户主体一致,即认证主体与运营主体一致(填写的信息需与申请微信认证的信息一致)。
2、切记此栏中填写的&重要邮箱&,该邮箱为接收微信支付相关重要信息。
3、若&营业执照有效期&、&组织机构代码证有效期&、&税务登记证有效期&日期无法选择,请修改电脑上的时间(提前或往后调整年份)。
申请所需资料以及步骤提示
财务审核资料填写
注意事项:
银行帐号信息关系到资金结算,请仔细核对填写。
进入审核期间
注意事项:
1、审核期间为7个工作日,请耐心等待。
2、审核期间不支持修改申请信息。
3、若审核不通过,可在微信公众平台&通知中心&查看具体审核不通过原因并重新提交完整资料进行审核。
资料审核通过后,按照指引下载合同模板、填写并签署盖章后寄回合同盖章件原件。
注意事项:
1、我司合同审核时间为7个工作日(收到合同起计算时间)。
2、通过审核后,商户便可在线下载合同,盖章后请根据指引寄回。
3、我司在收到合同确认无误后,会尽快盖章寄还商户(顺丰快递)。
4、为了不耽误进入下一步,建议商户将签订合同与开发工作同步进行(审核通过时,我司会将微信支付相关重要开发参数发送至&业务审核资料&时设置的邮箱中)。
5、若审核不通过,可在微信公众平台&通知中心&查询审核不通过的原因,请修改后在邮寄至我司。
缴纳保证金
根据提示前往财付通网站完成保证金缴纳。
需完成功能检测,发布后,可面向全部微信用户销售商品或提供服务。
阅读(...) 评论()微信支付功能怎么申请 微信支付功能申请流程和步骤
来源:行行出状元整理
浏览:15914
一、功能申请流程图:
二、微信支付申请流程详细说明:
(一)完成服务号认证:
1、微信支付功能目前仅对完成微信认证的服务号开放申请(企业、媒体、政府及其他组织)。若公众帐号符合开放申请要求,可直接进入第二步(微信公众平台提交资料);
2、订阅号可先升级为服务号,升级方法:登录微信公众平台—设置—帐号信息—升级为服务号;
3、未认证的服务号需先完成微信认证。
注:商户申请微信认证的主体与申请开通微信支付功能的主体需保持一致。
(二)完成申请资料审核:
1、登录微信公众平台,进入:服务-服务中心-商户功能;
2、提交商户基本资料
请准确选择经营范围,并如实填写出售的商品/服务信息,此处填写的信息将作为日后运营监管的依据;
3、提交业务审核资料
商户提交的资料,主体需与微信认证主体保持一致,以保证运营主体即认证主体;
4、提交财务审核资料
商户提交的财务资料,主体需与业务审核资料主体一致,以保证结算主体即运营主体;商户提交的所有资料,需加盖公章。
5、资料审核:
1)商户申请资料提交成功后,腾讯在7个工作日内反馈审核结果;
2)审核结果将以电子邮件的形式告知商户。商户也可登录微信公众平台,点击页面右上角小信封图标查看。
3)审核通过的通知邮件中,将包含非常重要的开发参数,请商户牢记申请时填写的“重要邮箱”地址,相关通知一经发送至“重要邮箱”地址,则视为腾讯已经向商户履行了通知义务。
重要邮箱”是商户在填写“业务审核资料”时设置的:
(三)功能开发、合同签订:
1、资料审核通过的商户可以进行功能开发工作:腾讯提供清晰的开发接口文档,帮助商户顺利完成功能开发工作。
注:为了不耽误进入申请流程中的第四步,即“缴纳保证金”、“申请发布全网“及”销售商品“流程,建议商户将合同签订与功能开发同步进行。
2、 签订合同
1)资料审核通过后,商户对合同进行盖章确认后请根据指引寄至腾讯。
2)若申请开通公众号支付功能,商户需签订《微信公众平台商户功能服务协议》和《微信支付服务协议》。
3)若申请开通APP支付功能,商户需签订《微信支付服务协议》,无需签订《微信公众平台商户功能服务协议》。
4)若申请同时开通公众号支付和APP支付功能,需签订《微信公众平台商户功能服务协议》和《微信支付服务协议》。
5)腾讯在收到商户寄回的合同后,会由专人负责审核,确认无误后,会尽快盖章并按照约定的份数寄还商户。
注:商户盖章时请注意加盖骑缝章。
(四)开通商户功能:
1、缴纳风险保证金:
1)商户登录财付通账户缴纳风险保证金;
该财付通账户的登录id和密码可在资料审核通过时腾讯发送的通知邮件中查看,登录id即:partnerid,登录密码即:partnerkey。
2)未缴纳风险保证金不影响开通商户功能,但保证金足额缴纳是款项结算服务开通的前提。
2、开通商户功能是指测试白名单之外的微信号也能在商户的公众帐号内使用微信支付功能,开通商户功能之后才能在公众帐号内售卖商品或服务。
三、微信支付功能常见热点问题问答
Q1:微信支付作为微信非常重要的能力?为什么之前没有全面开放?
一直以来,微信团队都在开放的道路上不断探索前行。微信支付作为非常重要的一环,全面开放之所以姗姗来迟,主要是基于体系完善度的考虑。微信的支付接口涉及到商家的认证资质、手续,更重要的是我们始终把用户体验放在第一位,因此对微信支付的开放慎之又慎。此前,我们与众多合作伙伴共同探索,在经过反复的测试,不断的优化之后,才正式对全行业全面开放。
Q2:本次微信支付全面开放给所有公众号吗?开放规则是什么?为什么目前还有条件限制?
本次微信支开放面向已经通过微信认证、且其经营范围属于首次开放类目的服务号。符合资质的服务号可以申请所有开放的类目,目前只限实物类的经营。包括有:商超百货、服饰鞋包、母婴食品、数码家电、图书、化妆品、汽车及配件等20多个类目范畴。
同时,经过一段时间的内测,我们也发现不同行业对平台能力的要求是不同的,还需要更多的平台能力和运营机制的磨合,因此我们本次先向相对成熟的行业开放,后续会根据平台的运营情况再考虑向其它行业逐步开放。
Q3:符合资质申请的公众号如何申请微信支付接口?
微信支付全面开放后,符合资质的公众号可以在微信公众平台的官网上直接发起申请,通过线上流程的指引来申请微信支付的接口。商户需提交完整的资料,在线签订合同并缴纳一定的保证金,在获得接口权限后,才可以售卖商品。具体流程了解可登录微信公众平台官网:https://mp. 公众号运营者登录后台将会看到“商户模块”的入口,通过“服务-服务中心-商户功能”的指引,直接申请线上流程。
Q4:微信支付全面开放后的价值是什么?
微信支付是连接一切的能力,微信支付的全面开放将助力传统企业的互联网化。微信支付全面开放后,将为基于微信的移动商家提供全新的支付能力,为用户带来全新的购买体验。微信的用户基础,社交能力,开放能力令微信支付不仅仅是一个工具,更形成有效触达用户和提供服务的平台。对整个行业来说,开放的公众平台+全面开放的支付能力,将深刻影响移动互联网未来生活的发展。
Q5:微信支付是否安全?你们如何保障商户交易的合法性和用户的安全体验。
安全是整个移动支付行业面临的共同问题,也是微信支付全面开放的前提条件。从内置安全保障到全额赔付机制,微信支付已经被验证是非常安全的。我们通过以下措施来保障商家和用户在微信上的安全支付体验。
◆绑定银行卡需要验证实名信息和银行预留手机号;绑定银行卡后设置支付密码,交易需要验证此支付密码,大额支付还需要验证手机短信;
◆微信认证商户网页是安全的支付环境,会有微信安全支付的认证标题;
◆支付后台有腾讯的大数据支撑,海量的数据和云端的计算能够及时判定用户的支付行为存在的风险性,如异地支付、非常用设备支付、QQ号被盗等情况,会分析和拦截异常支付行为;
◆7*24小时客户服务,加上微信客服,将及时为用户排忧解难;同时为微信支付开辟的专属客服通道,将以最快的速度响应用户的提出问题并做出处理判断。
此外,微信支付还联合PICC推出100%全赔保障,用户如因使用微信支付造成资金被盗等损失,将可获得PICC的全赔保障。而申请赔付时,只需提供相应的损失真实性证明和身份证明即可。
Q6:微信支付未来的开放计划是什么?
微信的开放策略将会持续推进,微信支付的开放也才刚刚开始。未来,我们会根据平台的运营情况逐步开放。
8月8日,中华人民共和国海关总署发布第232号令,宣布新《中华人民共和国海关监管区管理暂行办法》(以下简称《办法》)将于日起施行。《办法》对跨境电商影响较大的是海关监管业务,主要包括海关监管货物的运输工具进出、停靠,以及从事进出境货物装卸、储存、交付、发运等物流活动。而《办法》的实施或对跨境电商模式产生更多新的高效率尝试。
2018年跨境电商新监管模式正式生效
一度成为消费升级、消费转型背景下宠儿的跨境电商,增长速度飞快。今年315就爆出一度成为爆品的卡乐比麦片竟是来自日本核污染区食品。随着消费者购买海外产品的经验日渐丰富,各种问题不断暴露出来,但如何监管跨境电商也成为一大难题。
网络餐饮服务监管出新规,能否止住网络餐饮乱象
近日,各家媒体都在报道百度外卖裁员一事。据相关媒体报道,百度外卖已经开始裁撤渠道城市经理,一些区域负责人已经拿到了裁员名单,有一半的渠道城市经理将接受“优化”,HR也已经开始跟员工谈话。但是,该消息被百度官方否认。百度从裁撤医疗事业部,再到现在百度外卖裁员似乎与李彦宏2月6日内部演讲中提到的“要淘汰没有市场竞争力的产品”有关。
你最爱的韩国面膜竟含有“粪大肠菌群”
春节后,国家质检总局第一次公布了一批不合格的进口食品、化妆品信息。本批次不合格食品化妆品是2016年12月未予准入的食品化妆品信息,共涉及514批次。
淘宝真心容不下假货?假货规则再升级
1月20日,淘宝发布《淘宝网出售假冒商品相关规则及实施细则变更公示通知》,对假货规则重磅升级,同时新增“三振出局”规则。该规则为正式生效,淘宝再度发布调整假冒材质成分、描述不符相关规则变更通知。
卖家、买家注意:七天无理由退货有变
最新消息,工商总局于11日在其官网上发布《网络购买商品七天无理由退货暂行办法》(以下简称《办法》)。《办法》要求网络商品销售者必须依法履行七天无理由退货义务,明确了不适用退货的商品范围和商品完好标准以及相关退货程序,并对网络商品销售者违反本办法规定,作出了明确的处罚细则。办法自日起施行。
还刷单?删差评?最强电子商务法将出台
电子商务法草案对电子商务发展过程中常见的问题,如:刷信誉、快递纠纷、信息安全等问题将从经验做法上升为法律制度确定下来。
卢捷,厦门创客猫网络科技有限公司创始人,热衷创新创业,是一位名副其实的有为创业青年,主要从事互联网相关行业,自双创热潮出现后,投身于为互联网活动、创新创业活动的主办方做线下活动的图文直播、现场采访、媒体报道等这样的一个现场媒体服务。
恒基瑞驰科技创始人,美国天马迅达快递副董事长。2007年赴美留学,进修工商管理硕士。2010年5月创立了美国迅达快递,致力于为海外华人和国内海淘用户提供优质的物流服务。2014年5月份联合创立了美国天马迅达快递。在全美30多个州开设了100多家加盟店,服务于全美华人,电商以及海淘客户。2016年开始投资创立“恒基瑞驰供应链管理平台”,全面服务于平行进口车的各个贸易商与经销商。
服务热线:点击阅读原文
微信开发之微信公众号支付
8月4日 发布,来源:
上月初的时候写过一篇关于的文章,文章里面大概用通(啰)俗(里)易(啰)懂(嗦)的话语讲述了关于在微信登陆这块的一些理论要点和代码实现。这次算是微信开发系列的延续篇,主要记录一下在工作中遇到的关于微信支付部分功能的实现
由于工作范围有限,这篇就暂时谈论一下关于微信公众号支付的有关功能。
俗话说的好,(前方高能...)有一件战斗力爆表的装备,升级打怪的速度自然也就更快了,当然这不是一篇介绍如何升级打怪的文章,而是一篇有深度的、有长远意义的文章,好了,自夸的话就不多说了,博主有自知之明。
虽说不是升级打怪,但是作为一只“猿”,尤其是是聪明的“猿类”,在遇到新功能的时候,找到好的方法,也就相当于找到了一件衬手的、牛X的兵刃,搞出新(刷)功(野)能的速度自然也就快很多
1、匍匐前进,观察敌情
关键词:阅读文档。工作中遇到之前未曾做过的功能的时候,相信一个好的猿叔叔/媛姐姐都会有一套自己的解决思路,那么第一步相信能获得大家集体点赞的就是阅读相关的文档了,仔细阅读,细心观察。喏~有关微信支付文档已经放在这里了。文档读得好,下班下的早~mie~~~
2、扩大范围,隐秘嗅探
关键词:关键字/词搜索。在看完文档之后,仍有不解之处,这时候身边没有可以请教的大佬,映入眼帘的只有电脑、键盘、鼠标,心里一阵慌乱。。。想到下午完不成任务、无延期的加班、组长的白眼,眼前一黑.............................................................“兄弟...兄弟...你特么醒醒啊,代码需要你,还有个bug没改啊,你不能这样啊”。夏天的时候,网络上段子说的好空调、wifi、西瓜,‘苏菲’一夏。那么程序员的法宝可就多了,这段就写相关的————搜索引擎、输入关键字、回车。得到的是整个互联网的资源,如果有谷歌的话,那就是整个宇宙的资源了。拥有了整个宇宙的资源之后,还怕啥,就是干,犹豫不划算嘛
3、发现雷区,获取情报
关键词:取经。上面2里面提到的扩大范围,隐秘嗅探,意在我们通过庞大的搜索引擎和互联网获取资源,但是在浏览这些资源的时候,我们要学会辨别哪些是有用的,哪些是已经了解过的,对于无用的水文和了解过的文章可以略过....我们大概会浏览到相当多的博文,良心博主(比如我,歪脸笑.jpg)的博文里,或多或少都会提到些开发过程中遇到的坑/bug,以妨后来者踩坑。
通过上面的准备工作,相信我们已经获取到了诸多的相关资料,本文涉及到的功能实现所需要的相关资料,将会在下面无偿分享出来(PS:为博主的无私奉献精神而感动啊~333333)
什么是公众号支付?
公众号支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。应用场景有:
用户在微信公众账号内进入商家公众号,打开某个主页面,完成支付
用户的好友在朋友圈、聊天窗口等分享商家页面连接,用户点击链接打开商家页面,完成支付
将商户页面转换成二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付
微信支付用户————泛指微信用户
微信客户端————微信APP
商户后台系统————商户平台
微信支付系统————故名思议,微信自己的支付系统
我们先通过一张图了解一下微信支付的流程:
这张图相信小伙伴在浏览微信支付文档的时候已经看到过了,虽然从用户点击支付按钮开始到微信支付系统确认支付完毕中间经过要13步之多的过程,但是实际上这也是很有必要的,我们可以看到支付在任何时候都是需要重视的,因为这是一个关于钱的问题,只要涉及到了它,就必须确保它每一步的顺利执行和安全性。在我们快速开发功能的时候,有时候不得不压抑住我们想要窥探其具体实现的好奇心,只了解其中关键几步,以达到快速开发的目的,剩下的好奇心只能等课后了。
总结了其中的关键几步,以便大家参(快速)考(查阅),其中个把关键词均已红色字体标出
用户在页面点击支付按钮,商户后台系统生成微信支付系统的订单信息,调用下单API,发送给微信支付系统
微信支付系统接收支付信息生成临时支付单信息,返回给商户后台系统
商户后台系统拿到临时支付单信息,生成JSAPI(微信支付SDK)调用所需要的支付参数并签名
通过JSAPI接口发起支付请求给微信支付系统
微信支付系统检查参数合法性和授权域信息,返回验证结果给微信客户端,微信客户端弹出支付窗,输入密码,支付
用户输入密码完之后,客户端主动提交支付信息到微信支付系统,微信支付系统验证授权并处理相应业务,返回处理结果给商户后台,商户后台系统根据结果给用户相应提示
微信已经提供了完整的、安全的、方便使用的SDK供我们饮用,就在微信支付文档里面,或者
支付授权目录
支付授权目录,和上篇文章中说到的登陆授权回调域性质差不多,但是区别在于这里用于支付授权。现在的公众号支付授权目录配置已经从公众号迁移到了微信商户平台中,开发者可以在商户平台中进行配置,下图所示:
具体公告,请点击:查看
其他几个点
要使用微信公众号支付功能必须是要微信服务号或者企业号
支付的时候也要检查网页授权域名是否设置哦
没有微信开发者工具的一定要下载个微信开发者工具,因为接下来,包括你在做微信开发的时候一定会需要它,它很强势,不用不行啊
饿货,来个代码饼干?
终于来到开坦克杀敌的环节了,一阵莫名激动,能看到这里的小伙伴一定是真爱啊!~
为什么把这个文件单独提出来,因为它很重要啊(博主君废话模式开启,23333),这个页面通俗点来说用于调起支付框,输入支付密码的操作。当我们下载好了PHP版的微信支付SDK的时候,打开目录大概会是这个美丽的样子
关键代码块:
//②、统一下单
$input = new WxPayUnifiedOrder();
// 商品名称
$input-&SetBody('坦克');
// 描述吧应该是 可以省略不写
$input-&SetAttach("");
$input-&SetOut_trade_no($pay_info['trade_no']);
// 支付金额
$input-&SetTotal_fee($pay_info['total_fee']);
// 开始时间
$input-&SetTime_start(date("YmdHis"));
// 失效时间
$input-&SetTime_expire(date("YmdHis", time() + 600));
// 标签 可以省略不写
$input-&SetGoods_tag("");
// 支付回调url
$input-&SetNotify_url("/mall/sz_front/wx_alipay/notify");
以上代码均产生于jsapi.php这个文件,代码的注释差不多就是这个意思,没有写注释的博主也不知道啥意思(绝望.jpg,知道的可以告知下...感谢大恩大德)
WxPay.Config.php
这个是关于微信支付配置的文件,放置在SDK根目录下的lib目录里,找到它更改里面的对应配置项。具体有什么作用怎么改,这里就不解释了。文件里的注释写的很清楚,讲真,ZZ都能看的明白,微信SDK开发组的兄弟还是很用心的...点赞
结合CI框架
首先,把SDK目录文件放在application\libraries目录。
1、唤起支付页面当用户在前端点击支付的时候,跳转到如下方法:
* 跳转到微信支付页面
* @param int $order_id 订单ID
public function index($order_id) {
* 首先要校验订单ID、真实性等
* 这里略过
$goods_name = $this-&order_goods_model-&get_value_by_notpk('goods_name', array('order_id' =& $order_id));
$data['pay_info'] = array(
'trade_no' =& $order_info[0]['order_sn'],//订单名称,必填
'goods_name' =& $goods_name, //商品名称
'total_fee' =& $order_info[0]['pay_fee']*100,//付款金额,必填
'remark' =& $goods_name,//商品描述,可空
// 调用支付页面 jsapi
$this-&load-&view("sz_front/wx_alipay/jsapi", $data);
2、jsapi页面赋值大部分代码和原生的差不多,修改一小部分,包括引入各种类库等,这里为了方便展示,采用图片的形式列出
上面三张图一共做了四件事:
引入所需要的支付类库
赋值支付信息
根据支付结果进行提示并跳转页面
隐藏共享地址
支付异步通知 notify
异步通知,支付完结之后,微信支付系统会发送支付结果到这个地址,要求这个地址可以访问,可以在浏览器输入地址进行测试
public function notify() {
// 引入异步通知处理类库
require_once APPPATH.'libraries/Payment/wxpay/example/notify.php';
$notify = new PayNotifyCallBack();
$notify-&Handle(false);
// 获取支付状态
$is_success = $notify-&IsSuccess();
* $wx_payinfo 微信支付回调数据
* 包括支付状态、商户平台的订单、金额、支付成功支付号等
$wx_payinfo = $is_success['data'];
//支付成功
if($is_success['code'] == 1){
* 业务处理
由于异步通知是在“暗地里”进行,所以我们想要监控它,了解它返回了什么数据,可以简单的使用file_put_contents()函数把结果json_encode()一下写入log文件记录。
微信开发其实很简单,有SDK在手,支付我有。博主君为了凑字数,才编的这么多废话,哈哈哈~一不小心说了实话,心机博~~~
距离当初做出这个功能已经有一段时间了,当初在百度查阅资料获取到的资源和众多博文地址也已经记不太清了,有兴趣的朋友可以百度搜索PHP微信开发等关键字进行查阅。实际在功能的实现中,遇到最多的问题就是路径引入了。还有就是强烈推荐微信开发者工具,在微信开发的时候相当有用处(就算我不说,各位朋友应该也知道,又一次打脸...啪(pia)啪(pia)啪(pia))。
再见,七月。
你好,八月。
深入浅出,思路清晰 !
深入浅出,思路清晰 !
我要该,理由是:
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)

我要回帖

更多关于 微信公众号支付功能 的文章

 

随机推荐