//第一部分 微信分享
//参考:https://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
//步骤一:绑定域名//先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
//步骤二:引入JS文件//在需要调用JS接口的页面引入如下JS文件,(支持https):
//http://res.wx.qq.com/open/js/jweixin-1.0.0.js//请注意,如果你的页面启用了https,务必引入 https://res.wx.qq.com/open/js/jweixin-1.0.0.js ,
//否则将无法在iOS9.0以上系统中成功使用JSSDK<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script><script type="text/javascript" src="
//步骤三:通过config接口注入权限验证配置wx.config({debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,//若要查看传入的参数,可以在pc端打开,//参数信息会通过log打出,仅在pc端时才会打印。appId: '', // 必填,公众号的唯一标识timestamp: , // 必填,生成签名的时间戳nonceStr: '', // 必填,生成签名的随机串signature: '',// 必填,签名,见附录1jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline'],// 必填,需要使用的JS接口列表,所有JS接口列表见附录2success:function(res){alert(res.errMsg);},fail:function(res){alert(res.errMsg);}});//参数说明://1.appid:开发--->基本配置 可以看到有AppID和AppSecret 得APPID//2.timestamp:此处的timestamp与大家说的大写的timeStamp没有关系 //  此刻是2016/02/11 21:27 即为2016021121 本人开发只到的'时'这个单位 更后面分秒毫秒未测试//3.nonceStr:随机字符串 自己生成 不长于32位//4.signature:签名 //  生成签名的算法:签名生成规则如下:参与签名的字段包括noncestr(随机字符串), //  有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。//  对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,(即按字母序排好参与签名字段)//  使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。//  这里需要注意的是所有参数名均为小写字符,获得string1。//  对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。//  (SHA1加密后对结果取小写即sha1)//  此处生成签名的时候需要获取jsapi_ticket与access_token是有时效性的,//  需要开发者自己去写维护程序,而获取两者的方法可以参考开发文档,按照开发文档没有任何模糊的地方。//  签名验证工具:  //5.jsApiList:['','','',''] 此参必填,需将要调用的JS接口写入,未写入不可成功调用,先认证后调用//6.success,fail:两个分别在验证成功、失败后调用,res接受返回的参数。//  调用成功时:"xxx:ok" ,其中xxx为调用的接口名 调用失败时:其值为具体错误信息//  用户取消时:"xxx:cancel",其中xxx为调用的接口名
//步骤四:通过ready接口处理成功验证wx.ready(function(){// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,// config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,// 则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,// 则可以直接调用,不需要放在ready函数中。// 调用JS分享接口// 分享到朋友圈wx.onMenuShareTimeline({title: '', // 分享标题link: '', // 分享链接imgUrl: '', // 分享图标//IOS开发的时候可能会有格式要求与大小要求 注意success: function (res) { // 用户确认分享后执行的回调函数alert(res.errMsg);},cancel: function (res) { // 用户取消分享后执行的回调函数alert(res.errMsg);}});// 分享给朋友wx.onMenuShareAppMessage({title: '', // 分享标题desc: '', // 分享描述link: '', // 分享链接imgUrl: '', // 分享图标type: '', // 分享类型,music、video或link,不填默认为linkdataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空success: function (res) { // 用户确认分享后执行的回调函数alert(res.errMsg);},cancel: function (res) { // 用户取消分享后执行的回调函数alert(res.errMsg);}});});
//注意//1.在微信内打开的网页如果需要分享,只能在当前网页进行分享,且分享的URL只能是当前网页的URL,//  不能指向第三网页,否则会无效,获取当前网页的URL可以使用JS弹出window.location.href.//2.如果是APP中内嵌的H5页面,可以通过调用APP原生接口来实现分享,将所要分享的页面参数传递,//  当在微信中打开APP分享的页面,如果当前页面的URL与JS.con//3.微信分享的JS接口调用存在的问题,当用户分享的URL与微信浏览器抓取的当前网页的URL不同时,//  分享效果失效,微信会以抓取结果为准,分享当前网页,描述信息变为网页链接地址,图片可能为空//4.URL相同是指?前面的部分相同,问好后面的部分可以不同//第二部分:微信支付开发,调用JS支付
//参考:https://pay.weixin.qq.com/wiki/doc/api/wap.php?chapter=9_1
//整体流程:商户生成自己的订单-->访问微信服务器获取预支付订单-->调用JS支付接口发起支付 //  (这中间还有相关的一些微信内部的校验)
//第一部分:当用户点击生成订单的时候,在商户数据库生成订单,订单包含支付的一些必须参数。
//第二部分:调用统一下单API发起HTTPS请求 请求数据为xml形式的字符串//<xml>//   <appid>wx2421b1c4370ec43b</appid>//   <attach>支付测试</attach>//   <body>JSAPI支付测试</body>//   <mch_id>10000100</mch_id>//   <nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str>//   <notify_url>http://wxpay.weixin.qq.com/pub_v2/pay/notify.v2.php</notify_url>//   <openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid>//   <out_trade_no>1415659990</out_trade_no>//   <spbill_create_ip>14.23.150.211</spbill_create_ip>//   <total_fee>1</total_fee>//   <trade_type>JSAPI</trade_type>//   <sign>0CB01533B8C1EF103065174F50BCA001</sign>//</xml>//注意://1.请求方式为post,编码方式为UTF-8//2.支付金额total_fee单位为分//3.mch_id商户号:微信支付-->商户信息-->基本信息中的商户号//4.device_info:PC网页或公众号内支付请传"WEB"//5.sign:参考  //  生成签名需要注意的地方:签名正确返回值错误时极有可能是把AppSerceat与key值弄混了//  key值-->微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置 //  加密方式:MD5 所有字符大写 //  验证签名正确性的地址工具: 可添加删除属性//6.out_trade_no:商户订单号 重要 即订单号//7.spbill_create_ip:支付端IP地址 此处可能存在多个地址 提供个人JAVA获取IP地址实现代码public static String getClientIp(HttpServletRequest request) {String ip = request.getHeader("x-forwarded-for");if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknow".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();}//目前使用第一个获取的值是没有问题的return ip.split(",")[0];}//8.time_start:交易起始时间,yyMMddHHmmss//9.notify_url:微信支付成功的回调地址 重要 必须为可以直接访问到的地址//10.trade_type:JSAPI,APP 微信内支付-->JSAPI APP调用的微信支付-->APP//11.openid:重要 当在微信内支付的时候必须传用户的openid//  开发文档+如上说明 完成支付下单的预操作 参数交互为xml形式的字符串 //  返回结果可先判断结果请求状态码是否是200 再从结果的content中获取字符串解析获取预支付单号
//第三部分:调用JS接口发起支付//1.发起支付调用的JS接口必须先做认证 即先调用wx.config接口//2.认证成功之后发起支付请求,调用的支付JS接口需在wx.config的jsApiList中写入,接口如下wx.ready(function(){wx.chooseWXPay({timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。//但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符nonceStr: '', // 支付签名随机串,不长于 32 位package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'paySign: '', // 支付签名success: function (res) {// 支付成功后的回调函数alert(res.errMsg);}});});//注意://1.prepay_id 通过微信支付统一下单接口拿到,//2.paySign 采用统一的微信支付 Sign 签名生成方法,注意这里 appId 也要参与签名,//  appId 与 config 中传入的 appId 一致,//  即最后参与签名的参数有appId, timeStamp, nonceStr, package, signType。//  此处注意:签名时候的timeStamp s大写 调用JS接口的时候的timestamp s小写//3.*****请注意该接口只能在你配置的支付目录下调用,同时需确保支付目录在JS接口安全域名下。//  注意:"${pageContext.request.contextPath }/weixin/js/pay/?order_id="+data;//  以上为我发起微信支付的URL,注意URL?之前的最后一个为'/',这个'/'如果缺少会出错//  支付目录设置地址:微信支付-->开发配置-->支付授权目录 开发使用测试授权目录即可//4.此处使用的paySign的生成方式为  //  参与签名的字段除了上述appId, timeStamp, nonceStr, package, signType,还包含key值//5.wx.config的认证签名按照分享的来,使用sha1加密,与key无关//6.使用APP调用微信支付的SDK的时候需要在后端访问微信服务器发起预支付请求,个别字段会与现在不一样,//  请参考统一下单API//以上//如有不妥 请指出 本人已完成相关开发 后端开发工程师//相关问题可以发往邮箱:free.dream.fate@gmail.com

转载于:https://my.oschina.net/u/2405524/blog/614510

微信分享与支付开发详解相关推荐

  1. 微信小程序详解 php,微信小程序列表开发详解

    本文主要和大家分享微信小程序列表开发详解,主要以代码的形式和大家分享,希望能帮助到大家. 一.知识点 (一).列表渲染 wx:for tip:wx:for="array"可以等于参 ...

  2. 微信支付开发(5)--JSAPI支付开发详解

    点此查看 微信公众号/微信网页/微信支付/企业微信/小程序开发合集及源代码下载 本文目录 1. 场景 2. 普通商户支付 2.1 构建项目 2.2 编写配置类 2.3 网页授权获取openid 2.4 ...

  3. 微信小程序支付流程详解

    原创 Dr Hydra 码农参上 2020-11-22 11:00 收录于合集#微信开发技术3个 最近在工作中接入了一下微信小程序支付的功能,虽然说官方文档已经比较详细了,但在使用过程中还是踩了不少的 ...

  4. 微信小程序后台开发详解

    微信小程序后台开发 前言 开发环境 开发流程 项目整体结构 接口开发 项目部署 ip映射 Nginx反向代理 gunicorn+super多进程开启服务+进程监控 ssl证书 小程序常用功能 微信支付 ...

  5. 微信和支付宝支付模式详解及实现(.Net标准库)

    支付基本上是很多产品都必须的一个模块,大家最熟悉的应该就是微信和支付宝支付了,不过更多的可能还是停留在直接sdk的调用上,甚至和业务系统高度耦合,网上也存在各种解决方案,但大多形式各异,东拼西凑而成. ...

  6. 微信和支付宝支付模式详解及实现(.Net标准库)- OSS开源系列

    2019独角兽企业重金招聘Python工程师标准>>> 支付基本上是很多产品都必须的一个模块,大家最熟悉的应该就是微信和支付宝支付了,不过更多的可能还是停留在直接sdk的调用上,甚至 ...

  7. 服务端微信小程序支付/退款详解

    一.小程序支付 参考小程序支付开发文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_4&index=3 账 ...

  8. php 工商银行公众号支付代码_微信支付PHP SDK之微信公众号支付代码详解

    这里假设你已经申请完微信支付 1. 微信后台配置  如图 我们先进行测试,所以先把测试授权目录和 测试白名单添加上.测试授权目录是你要发起微信请求的哪个文件所在的目录. 例如jsapi 发起请求一般是 ...

  9. php微信公众号支付实例教程,微信支付PHP SDK之微信公众号支付代码详解_php实例...

    这里假设你已经申请完微信支付 1. 微信后台配置 如图 我们先进行测试,所以先把测试授权目录和 测试白名单添加上.测试授权目录是你要发起微信请求的哪个文件所在的目录. 例如jsapi 发起请求一般是j ...

最新文章

  1. C++的STL栈实现队列
  2. [WorldWind学习]12.WavingFlags和WavingFlagLayer
  3. 程序员食品营养(1)-面包基础
  4. vue 实现文件下载
  5. usbserialconverter驱动找不到_驱动到底是什么?别再用精灵管家无脑装驱动了
  6. Rational相关工具介绍
  7. [剑指offer] 7. 斐波那契数列 (递归 时间复杂度)
  8. php 实用 函数,PHP实用函数9
  9. 《不只是美:信息图表设计原理与经典案例》—— 2.2 数据的展示形式
  10. POI PPT模板字段替换
  11. L1、L2正则regularization和weight decay
  12. 学会“狼”的思维(一)
  13. Linux操作系统的pstack工具
  14. GitLab秘钥添加
  15. 华南理工大学软件文化节“三七互娱杯”程序设计竞赛
  16. python 小说 小说_如何使用python上小说网爬网络小说?
  17. vue使用sort实现json数据中字母排序
  18. 别再给手机外接OTG键鼠玩刺激战场了:其实还能这样操作
  19. 【日拱一卒进击大厂系列】如何写好一份技术简历
  20. macos查看端口占用情况

热门文章

  1. greenplum建表策略详解
  2. 安卓小游戏:飞机大战
  3. 服务器被黑客攻击和被挖矿之后的SSH安全防御 | SSH security defense after server is hacked and mined
  4. 数据统计分析(SPSS)【2】
  5. 解读2018:13家开源框架谁能统一流计算?
  6. C/C++新手入门教程:傻瓜都会的VS2013使用教程,成为程序员的第一步
  7. 全网最全AD16——PCB布线
  8. 中国四大名著.html
  9. VINS fusion软件架构分析(4)---后端处理processMeasurements()功能函数概览
  10. win10蓝牙鼠标、耳机无法连接,无蓝牙开关标志解决方案