tp5 微信jsapi 支付支付jsapi有没有同步通知

相关文章推荐
1、微信公众号:
    独特的appid、appscrect、接口权限之中设置可以获取用户ID信息权限的域名(每个用户对于不同公众都会有一个特有ID,通过这个ID获取用户微信账号基本信息、详情...
异常信息为(我的方法名为download()):Uncaught TypeError: download is not a function at HTMLAnchorElement.onclick不...
ps:接着之前的完成了微信授权获取用户的基础信息外微信支付也需要快速完成,支付的确很多坑,大多数是不认真阅读开发文档导致stemp1 :发起预支付api此处遇到的坑是,由于需求中的信息,例如公众号下对...
微信公众号的永久二维码,在根据官方提供的文档踩了N个坑后,终于是调试通了,写个随笔文章。
一、纯属个人理解:
1、微信JSAPI是对于微信公众号来接入开发的,需要有微信公众号和商户号。
2、提供生成...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)微信支付-JSAPI模式开发
之前写了两篇文章都不是关于技术类的,这个号主要还是以分享技术为主,第三篇必须得上技术类的文章,不然会对不起大家的,所以就有了今天的文章。
现在微信支付开发很火,也不是特别难,网上也很多别人整理的教程,也有官方开发文档。主要是每个人在开发的过程中常常会遇到一些不同的小问题,然后怎么去解决这才是最关键的。作为web开发者,尤其是后端开发者,不会微信支付开发的话就真的很low。
最近做了一个在线租车的微信项目,项目其中正好有微信支付这个功能,我在做的过程中也遇到了一些小问题,虽说之前也做过,但之前都没遇到过这些问题。最后经过自己的思考和网上查资料,一个一个方法的去调试,最后完美的解决了。
以下是我做微信支付功能的相关效果截图:
以下是我的开发步骤:
注明:我用的是Thinkphp框架搭的项目,所以这个微信支付功能是在TP的基础上实现的。
第一步:需要以下资料
'WX_APPID' =& '微信公众号应用ID'
'APPSECRET' =& '微信公众号应用密钥'
'MCHID' =& '微信商户ID'
'KEY' =& '微信商户密钥'
微信商户密钥如何设置:
第二步:支付目录授权配置
第三步:上传类库
路径:/Libs/Think/Library/Vendor/WxPayPubHelper
微信支付-JSAPI模式没有用到证书,也可以不用上传证书。
路径:/Libs/ThinkPHP/Library/Vendor/SendMessage
这个是微信公众号主动给用户推送消息的类,当订单支付完成时执行这个方法,给用户推一个消息,通知用户订单支付成功,此功能我主要是为了用户体验而加的。
第四步:配置文件
第五步:控制器
第六步:支付页面
到此为止,微信JSAPI支付功能就全部做好了。
我在做微信支付的过程中出现了一个比较麻烦的问题,耗费了我半天的时间才解决的,就是在支付过程中回调通知地址的URL不规则,导致虽然支付成功了,但获取不到订单信息以及对订单信息的处理。微信支付要求回调通知URL必须不能带参数,如:&https://你的域名/index.php/home/WxJsAPI/notify/&。因为我用的是Thinkphp的路由模式3,此路由带了参数,如:&https://你的域名/index.php?s=/home/WxJsAPI/notify/&。(凡是URL里带有&?&的,都算是带了参数)
我最后的解决方法是,重写服务器的URL,让Thinkphp的三种模式都兼容。所以我就在Nginx的配置文件里rewrite了URL,如:
当然,如果你是第一次做,肯定会遇到各种问题,如果你是新手,遇到的问题都不知道为什么,即使你做过了再做我相信还是可能由于细节上的疏忽会出现问题的,不过不要烦躁,耐心的去发现问题,耐心的去调试,最后一定可以解决的。
完整代码包下载:/s/1i5rn3w&>&微信支付jsAPI
微信支付jsAPI
上传大小:6KB
需要修改weixin_pay.js里面的参数为自己的公众号参数,调用说明:/Xjng/p/3909450.html
综合评分:4(42位用户评分)
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有42条
写的不错的JS
借鉴一下,最好不要照抄
没用上,还是感谢分享
上传者:yrq205
上传时间:积分/C币:5
上传者:went
上传时间:积分/C币:3
上传时间:积分/C币:5
上传者:zwjapple
上传时间:积分/C币:3
上传时间:积分/C币:5
上传者:qq_
上传时间:积分/C币:2
上传者:admin_
上传时间:积分/C币:15
上传者:qq_
上传时间:积分/C币:5
上传者:easyprogramming
上传时间:积分/C币:2
上传者:lekuhu
上传时间:积分/C币:10
上传者:onlymetagain
上传时间:积分/C币:5
上传者:ww106
上传时间:积分/C币:5
上传者:jiequandao1
上传时间:积分/C币:10
上传者:caozhongde1991
上传时间:积分/C币:10
上传者:m0_
上传时间:积分/C币:5
上传者:jose_hexi
上传时间:积分/C币:20
上传者:huotiqin6464
上传时间:积分/C币:20
上传者:xiaomifan2012
上传时间:积分/C币:5
上传者:qq_
上传时间:积分/C币:5
上传者:admin_
上传时间:积分/C币:2
审核通过送C币
node.js视频教程
创建者:love
js常用插件库
创建者:yxys01
前端开发必备书籍
创建者:guanxi2010
上传者其他资源上传者专辑
Redirector插件的Chrome安装包
mysql-connector-python 2.0.2安装包
Phantomjs-linux-2.0-编译后的版本
cmdbuild webservice官方说明文档
pycharm monokai 主题
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
扫码关注并点击右下角获取下载码
输入下载码
为了良好体验,不建议使用迅雷下载
微信支付jsAPI
会员到期时间:
剩余下载个数:
剩余C币:593
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
(仅够下载10个资源)
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励5下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
微信支付jsAPI关键字:微信支付 微信支付v3 jsapi支付 统一支付 Native支付 prepay_id&作者:方倍工作室原文:&&
本文介绍微信支付下的jsapi实现流程
微信支付现在分为v2版和v3版,号之前申请的为v2版,之后申请的为v3版。V3版的微信支付没有paySignKey参数。v2的相关介绍请参考方倍工作室的其他文章。本文介绍的微信支付v3。
1. OAuth2.0授权
JSAPI 支付前需要调用 登录授权接口获取到用户的 Openid 。所以需要做一次授权,这次授权是不弹出确认框的。其实质就是在用户访问
http://www.fangbei.org/wxpay/js_api_call.php
https://open./connect/oauth2/authorize?appid=wx8888&redirect_uri=http://www.fangbei.org/wxpay/js_api_call.php&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
以此来获得code参数,并根据code来获得授权access_token及openid
其实现的详细流程可参考&
在微信支付的Demo中,其代码为
1 //使用jsapi接口
2 $jsApi = new JsApi_pub();
4 //=========步骤1:网页授权获取用户openid============
5 //通过code获得openid
6 if (!isset($_GET['code']))
//触发微信返回code码
$url = $jsApi-&createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL);
Header("Location: $url");
//获取code码,以获取openid
$code = $_GET['code'];
$jsApi-&setCode($code);
$openid = $jsApi-&getOpenId();
这一步的最终结果就是获得了当前用户的openid
ou9dHt0L8qFLI1foP-kj5x1mDWsM
2. 统一支付
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口统一支付中以下参数从配置中获取,或由类自动生成,不需要用户填写
$this-&parameters["appid"] = WxPayConf_pub::APPID;//公众账号ID
$this-&parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号
$this-&parameters["spbill_create_ip"] = $_SERVER['REMOTE_ADDR'];//终端ip
$this-&parameters["nonce_str"] = $this-&createNoncestr();//随机字符串
$this-&parameters["sign"] = $this-&getSign($this-&parameters);//签名
在JSAPI支付中,另外填写以下参数
//统一支付接口中,trade_type为JSAPI时,openid为必填参数!
$unifiedOrder-&setParameter("openid","$openid");//商品描述
$unifiedOrder-&setParameter("body","方倍工作室");//商品描述
//自定义订单号,此处仅作举例
$timeStamp = time();
$out_trade_no = WxPayConf_pub::APPID."$timeStamp";
$unifiedOrder-&setParameter("out_trade_no","$out_trade_no");//商户订单号
$unifiedOrder-&setParameter("total_fee","1");//总金额
$unifiedOrder-&setParameter("notify_url",WxPayConf_pub::NOTIFY_URL);//通知地址
$unifiedOrder-&setParameter("trade_type","JSAPI");//交易类型
其他为选填参数
//非必填参数,商户可根据实际情况选填
//$unifiedOrder-&setParameter("sub_mch_id","XXXX");//子商户号
//$unifiedOrder-&setParameter("device_info","XXXX");//设备号
//$unifiedOrder-&setParameter("attach","XXXX");//附加数据
//$unifiedOrder-&setParameter("time_start","XXXX");//交易起始时间
//$unifiedOrder-&setParameter("time_expire","XXXX");//交易结束时间
//$unifiedOrder-&setParameter("goods_tag","XXXX");//商品标记
//$unifiedOrder-&setParameter("openid","XXXX");//用户标识
//$unifiedOrder-&setParameter("product_id","XXXX");//商品ID
这些参数最终组成了这样的xml数据,
&openid&&![CDATA[ou9dHt0L8qFLI1foP-kj5x1mDWsM]]&&/openid&
&body&&![CDATA[方倍工作室]]&&/body&
&out_trade_no&&![CDATA[wx79]]&&/out_trade_no&
&total_fee&1&/total_fee&
&notify_url&&![CDATA[http://www.fangbei.org/wxpay/notify_url.php]]&&/notify_url&
&trade_type&&![CDATA[JSAPI]]&&/trade_type&
&appid&&![CDATA[wx8888]]&&/appid&
&mch_id&&/mch_id&
&spbill_create_ip&&![CDATA[61.50.221.43]]&&/spbill_create_ip&
&nonce_str&&![CDATA[60uf9sh6nmppr9azveb2bn7arhy79izk]]&&/nonce_str&
&sign&&![CDATA[2D8ABBA23D0F]]&&/sign&
将这些数据提交给统一支付接口
https://api.mch./pay/unifiedorder
将获得返回 如下数据
&return_code&&![CDATA[SUCCESS]]&&/return_code&
&return_msg&&![CDATA[OK]]&&/return_msg&
&appid&&![CDATA[wx8888]]&&/appid&
&mch_id&&![CDATA[]]&&/mch_id&
&nonce_str&&![CDATA[Be8YX7gjCdtCT7cr]]&&/nonce_str&
&sign&&![CDATA[885B6D8EF753A00C8EEDB]]&&/sign&
&result_code&&![CDATA[SUCCESS]]&&/result_code&
&prepay_id&&![CDATA[wx]]&&/prepay_id&
&trade_type&&![CDATA[JSAPI]]&&/trade_type&
其中包含了最重要的预支付ID参数,prepay_id,值为&
3、JS API支付
前面的准备工作做好了以后,JS API根据prepay_id生成jsapi支付参数生成代码如下
//=========步骤3:使用jsapi调起支付============
$jsApi-&setPrepayId($prepay_id);
$jsApiParameters = $jsApi-&getParameters();
生成的json数据如下
"appId": "wx8888",
"timeStamp": "",
"nonceStr": "gbwr71b5no6q6ne18c8up1u7l7he2y75",
"package": "prepay_id=wx",
"signType": "MD5",
"paySign": "9CF851EBF6C7D"
在微信浏览器中调试起js接口,代码如下
&meta http-equiv="content-type" content="text/charset=utf-8"/&
&title&微信安全支付&/title&
&script type="text/javascript"&
//调用微信JS api 支付
function jsApiCall()
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
&?php echo $jsApiP ?&,
function(res){
WeixinJSBridge.log(res.err_msg);
//alert(res.err_code+res.err_desc+res.err_msg);
function callpay()
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
jsApiCall();
&/br&&/br&&/br&&/br&
&div align="center"&
&button style="width:210 height:30 background-color:#FE6714; border:0px #FE6714 cursor:
font-size:16" type="button" onclick="callpay()" &贡献一下&/button&
当用户点击&贡献一下&按钮时,将弹出微信支付插件,用户可以开始支付。
4、支付通知
支付成功后,通知接口中也将收到支付成功的xml通知
&appid&&![CDATA[wx8888]]&&/appid&
&bank_type&&![CDATA[CFT]]&&/bank_type&
&fee_type&&![CDATA[CNY]]&&/fee_type&
&is_subscribe&&![CDATA[Y]]&&/is_subscribe&
&mch_id&&![CDATA[]]&&/mch_id&
&nonce_str&&![CDATA[60uf9sh6nmppr9azveb2bn7arhy79izk]]&&/nonce_str&
&openid&&![CDATA[ou9dHt0L8qFLI1foP-kj5x1mDWsM]]&&/openid&
&out_trade_no&&![CDATA[wx79]]&&/out_trade_no&
&result_code&&![CDATA[SUCCESS]]&&/result_code&
&return_code&&![CDATA[SUCCESS]]&&/return_code&
&sign&&![CDATA[0C1D7F550A5A138F0CEB]]&&/sign&
&sub_mch_id&&![CDATA[]]&&/sub_mch_id&
&time_end&&![CDATA[58]]&&/time_end&
&total_fee&1&/total_fee&
&trade_type&&![CDATA[JSAPI]]&&/trade_type&
&transaction_id&&![CDATA[4026]]&&/transaction_id&
notify_url收到以后,再返回确认成功消息给微信服务器
&return_code&&![CDATA[SUCCESS]]&&/return_code&
演示与源代码
演示地址,微信扫描下方二维码即可体验支付0.1分钱
我们提供已修复bug并调通的微信支付V3版PHP Demo,费用100元。需要技术指导+源码一共300元。
阅读(...) 评论()23:01 提问
微信支付jsapi v3提示不允许跨号支付
最后一步……告诉我支付失败,然后提示我不允许跨号支付,微信公众号,已认证。有遇到类似问题的小伙伴么
按赞数排序
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐

我要回帖

更多关于 微信支付同步通知 的文章

 

随机推荐