1 / 696 页
查看: 108429|回复: 6959
微信支付Demo下载(完整文档+使用说明)
在线时间 小时
提供两个测试版本,Java于PHP,都是经过测试成功后上传,功能都没有问题。代码逻辑有困惑时可以参考开发文档,上面很清楚。
1. 在开通微信支付的公众号下访问 htpp://服务器地址/mainServlet& && &&&
2. 修改MainServlet.java和TopayServlet.java 里面的商户参数,授权返回地址和notify_url部分即可。
3. 代码是别人的劳动成果,经自己稍微修改后测试成功,demo并没有十分的简化,大家可以做一个参考吧。如果出现签名失败,仔细检查下自己填写的appid和partnerkey是否正确。
4. 请注意:微信支付成功后的通知的url为notifyServlet,sb是返回的xml
5.最后祝大家都通过微信支付的测试。
1.【基本信息设置】
商户向微信提交企业以及银行账户资料,商户功能审核通过后,可以获得帐户基本信息,找到本例程的配置文件「WxPay.pub.config.php」,配置好如下信息:
& && &&&appId:微信公众号身份的唯一标识。审核通过后,在微信发送的邮件中查看。
& && &&&Mchid:受理商ID,身份标识
& && &&&Key:商户支付密钥Key。审核通过后,在微信发送的邮件中查看。
& && &&&Appsecret:JSAPI接口中获取openid,审核后在公众平台开启开发模式后可查看。
2.【native支付链接设置】
native支付中,用户扫码后调微信会将productid和用户openid发送到商户设置的链接上,确保该链接与实际服务路径一致。本例程的响应服务为「./demo/native_call.php」
3.【JSAPI路径设置】
通过JSAPI发起支付的代码应该放置在商户设置的「支付授权目录」中。
并找到本例程的配置文件「WxPay.pub.config.php」,配置正确的路径。
4.【证书路径设置】
找到本例程的配置文件「WxPay.pub.config.php」,配置证书路径。
5.【异步通知url设置】
找到本例程的配置文件「WxPay.pub.config.php」,配置异步通知url。
6.【必须开启curl服务】
使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的&;&即可。
7.【设置curl超时时间】
本例程通过curl使用HTTP POST方法,此处可修改其超时时间,默认为30秒。找到本例程的配置文件「WxPay.pub.config.php」,配置curl超时时间。
代码文件结构
===========================================
|-- README.txt---------------------使用说明文本
|-- WxPayHelper--------------------微信支付类库及常用文件
|& &|-- SDKRuntimeException.php----异常处理类
|& &|-- WxPay.pub.config.php-----------商户配置文件
|& &`-- WxPayPubHelper.php------------微信支付类库
|-- demo---------------------------例程
|& &|-- js_api_call.php------------JSAPI支付例程
|& &|-- native_call_qrcode.php-----native支付静态链接二维码例程
|& &|-- native_call.php------------native支付后台响应例程
|& &|-- native_call.log------------native支付后台响应日志
|& &|-- native_dynamic_qrcode.php--native支付动态链接二维码例程
|& &|-- notify_url.php-------------支付结果异步通知例程
|& &|-- notify_url.log-------------支付结果异步通知日志
|& &|-- order_query.php------------订单查询例程
|& &|-- refund.php-----------------退款例程
|& &|-- download_bill.php----------对账单例程
|& &|-- refund_query.php-----------退款查询例程
|& &|-- log_.php-------------------日志类
|& &`-- qrcode.js------------------二维码生成工具
`-- index.php
游客,如果您要查看本帖隐藏内容请
本帖被以下淘专辑推荐:
& |主题: 6, 订阅: 0
打赏列表共打赏了3次
打赏了1金币
很好,支持!
打赏了1金币
打赏了1金币
很好,支持!
在线时间 小时
一直想找它
在线时间 小时
不能用不能用不能用不能用不能用不能用不能用不能用不能用不能用不能用不能用不能用不能用不能用不能用
在线时间 小时
有需要。下载参照下。
请问怎么下载文档&
在线时间 小时
看看哈!!!!!
在线时间 小时
多谢楼主,好东西,下载看看
在线时间 小时
谢谢楼主分享
在线时间 小时
正需要支付这块的资料参考,感谢楼主分享
在线时间 小时
必须支持,这个不错,正准备做。
在线时间 小时
很好&&东西做的不错
在线时间 小时
非常需要,感谢分享
1 / 696 页
特别声明(务必查看!)
1、HTML5游戏《修仙三
侠卡牌手机网游《战蜀山》全套源码,包含服务端源
特别声明(务必查看!切!切!切!)
特别声明(务必查看!)
1、Unity2D 超酷拼图游
特别声明(务必查看!)
1、HTML5游戏《胸口碎
特别声明(务必查看!)
1、Unity3D 星空保卫战
| 联系方式
COPYRIGHT(C)2015 ZHONGQINGLONGTU NETWORK CO.LTD ALL RIGHTS RESERVED.ICP备号-4
北京中清龙图网络技术有限公司 地址:北京市朝阳区北苑路甲13号院北辰泰岳大厦11层微信支付,notify_url不能正常回调 - 开源中国社区
当前访客身份:游客 [
当前位置:
微信支付已经成功了,但是notify_url就是不能正常的回调,各位大神帮我看下呢
共有4个答案
<span class="a_vote_num" id="a_vote_num_
手动访问一下,确定可用;模拟从外网其他服务器访问一下。注意防火墙等拦截类和转发类的软件设置。
--- 共有 1 条评论 ---
确定可用的
(1年前) &
<span class="a_vote_num" id="a_vote_num_
这个页面有没有设置登录判断和一些其他的判断跳转
--- 共有 1 条评论 ---
根目录创建一个接收处理的文件也没有跳转到这里
(11个月前) &
<span class="a_vote_num" id="a_vote_num_
现在微信notify_url的格式是xml了,跟之前的不一样,之前踩过坑
--- 共有 4 条评论 ---
(7个月前) &
根本还没执行到notify_url的这个页面,支付页没有任何转跳
(11个月前) &
: 现在微信调用notify_url是用xml格式的
(11个月前) &
能具体说明下么,正在坑中
(11个月前) &
<span class="a_vote_num" id="a_vote_num_
可以考虑用BeeCloud的SDK,对notify_url和支付都做了封装,变成了一个简单统一的webhook,
更多开发者职位上
有什么技术问题吗?
开源中国...的其它问题最近微信APP支付遇到的一些坑 - CNode技术社区
这家伙很懒,什么个性签名都没有留下。
最近微信支付莫名其妙的进行了升级,在提交的移动应用开发中微信支付,如果收到的是这样的则无法使用在开放平台的移动应用开发的。因为邮件中少了2个关键的KEY:paySignKey, partnerKey。
一直询问支持,给的都是,研究了下,都是公众号的开发。
后面找到了这份,研究了一番,依旧觉得是公众号的,里面的需要个openid,这分明是微信公众号的开发。后面看到openid只是在公众号开发的时候才传递,所以决定按照这份文档一试。
按照文档中的,当进行到第三步的时候,文档这样说:
步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为prepay_id=wx
但是我我找遍了所有地方,都没有说明这个package具体的事例,以及参加签名的字段partnerId是老文档中的描述,而且这里的字符串怎么突然有大小写了?后面参考了老文档,成功了。
3.5 添加 prepayid 再次签名
获取到 prepayid 后,将参数 appid、appkey、noncestr、package(注意:此处应置为 Sign=WXPay)、partnerid、prepayid、timestamp 签名后返回给 APP,签名方法跟 3.4 节
app_signature 说明一致。得到参数列表如下,通过这些参数即可在客户端调起支付。
“appid”:“wxd930ea5d5a258f4f”, “noncestr”:“7a773f894d”, “package”:“Sign=WXpay”;
“partnerid”:“” “prepayid”:“f”, “sign”:“7ffecb600d810d2d8f28bc2811827b”, “timestamp”:“”
总结下开发:
先按照去获取prepay_id
得到prepay_id, 参考上面的 3.5 添加 prepayid 再次签名
然后再吐槽下微信支付:新接口获取prepay_id确实方便了很多,不需要去获取token、packge,请求与接收都有JSON换成了XML。但接口更新也不正式的声明下,文档也乱写,也没用完全开放出来,坑啊!
#!/usr/bin/env python
# coding=utf-8
xml2json:https:/&#/hay/xml2json
log_debug, log_info 相当于print
from flask import current_app
from aladin.helpers import log_debug, log_info
from hashlib import md5
import requests, time, json
from xml.etree import ElementTree
from xml2json import xml2json
import optparse
class WeiXinPay():
&&&微信支付,返回回客户端需要参数
def __init__(self, order_id, body, total_fee, nonce_str, spbill_create_ip='8.8.8.8'):
:param order_id: 订单ID
:param body: 订单信息
:param total_fee: 订单金额
:param nonce_str: 32位内随机字符串
:param spbill_create_ip: 客户端请求IP地址
self.params = {
'appid': current_app.config['APPID'],
'mch_id': current_app.config['MCHID'],
'nonce_str': nonce_str,
'body': body,
'out_trade_no': str(order_id),
'total_fee': str(int(total_fee)),
'spbill_create_ip': spbill_create_ip,
'trade_type': 'APP',
'notify_url': current_app.config['WEIXIN_NOTIFY_URL']
self.url = 'https://api.mch./pay/unifiedorder' # 微信请求url
self.error = None
def key_value_url(self, value):
&&&将将键值对转为 key1=value1&key2=value2
key_az = sorted(value.keys())
pair_array = []
for k in key_az:
v = value.get(k, '').strip()
v = v.encode('utf8')
k = k.encode('utf8')
log_info('%s =& %s' % (k,v))
pair_array.append('%s=%s' % (k, v))
tmp = '&'.join(pair_array)
log_info(&key_value_url ==& %s & %tmp)
return tmp
def get_sign(self, params):
&&&生成sign
stringA = self.key_value_url(params)
stringSignTemp = stringA + '&key=' + current_app.config['APIKEY'] # APIKEY, API密钥,需要在商户后台设置
log_info(&stringSignTemp ==& %s& % stringSignTemp)
sign = (md5(stringSignTemp).hexdigest()).upper()
params['sign'] = sign
log_info(&sign ==& %s& % sign)
def get_req_xml(self):
&&&拼接XML
self.get_sign(self.params)
xml = &&xml&&
for k, v in self.params.items():
v = v.encode('utf8')
k = k.encode('utf8')
xml += '&' + k + '&' + v + '&/' + k + '&'
xml += &&/xml&&
log_info(xml)
return xml
def get_prepay_id(self):
请求获取prepay_id
xml = self.get_req_xml()
headers = {'Content-Type': 'application/xml'}
r = requests.post(self.url, data=xml, headers=headers)
log_info(r.text)
log_info(&++++++++++++++++++++++++++&)
re_xml = ElementTree.fromstring(r.text.encode('utf8'))
xml_status = re_xml.getiterator('result_code')[0].text
log_info(&result_code ==& %s& % xml_status)
if xml_status != 'SUCCESS':
self.error = u&连接微信出错啦!&
prepay_id = re_xml.getiterator('prepay_id')[0].text
self.params['prepay_id'] = prepay_id
self.params['package'] = 'Sign=WXPay'
self.params['timestamp'] = str(int(time.time()))
def re_finall(self):
&&&得到prepay_id后再次签名,返回给终端参数
self.get_prepay_id()
if self.error:
sign_again_params = {
'appid': self.params['appid'],
'noncestr': self.params['nonce_str'],
'package': self.params['package'],
'partnerid': self.params['mch_id'],
'timestamp': self.params['timestamp'],
'prepayid': self.params['prepay_id']
self.get_sign(sign_again_params)
self.params['sign'] = sign_again_params['sign']
# 移除其他不需要返回参数
for i in self.params.keys():
if i not in [
'appid', 'mch_id', 'nonce_str',
'timestamp', 'sign', 'package', 'prepay_id']:
self.params.pop(i)
return self.params
class WeiXinResponse(WeiXinPay):
微信签名验证
def __init__(self, xml):
:param xml: 支付成功回调的XML
self.xml = xml
options = optparse.Values({&pretty&: False})
self.xml_json = json.loads(xml2json(self.xml, options))['xml']
self.sign = self.xml_json.get('sign', '')
def verify(self):
&&&验证签名&&&
self.xml_json.pop('sign')
self.get_sign(self.xml_json)
if self.sign != self.xml_json['sign']:
log_info(&signValue:%s !=
sing:%s& % (self.xml_json['sign'], self.sign))
return False
return True
不过,建议用nodejs写一个版本玩玩
恩,后面打算写个coffee的。
coffee真的很好用,哇哈哈
帅哥, 里的&下载&链接好像都不能点的,你是怎么下载SDK的呢?
打电话问过腾讯了,DEMO还在写中,只有被扫支付。所以只能看文档摸着过河,和参考原来的微信开放平台的移动应用开发https://open./cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&lang=zh_CN
非常感谢,没想到你还真回了,你的信息对我挺有用。
请问nonce_str
这个随机码是不是,获取prepay_id 与 第二次签名时 。都是用同一个。
nonce_str: 32位内随机字符串, 是同一个。
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的有关微信支付回调notify_url的问题
[问题点数:100分]
有关微信支付回调notify_url的问题
[问题点数:100分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2015年2月 Java大版内专家分月排行榜第二2014年3月 Java大版内专家分月排行榜第二
2014年9月 Java大版内专家分月排行榜第三2014年6月 Java大版内专家分月排行榜第三2014年2月 Java大版内专家分月排行榜第三2013年11月 Java大版内专家分月排行榜第三2013年10月 Java大版内专家分月排行榜第三
2016年1月 Java大版内专家分月排行榜第一2015年12月 Java大版内专家分月排行榜第一2015年9月 Java大版内专家分月排行榜第一2015年8月 Java大版内专家分月排行榜第一
2016年3月 Java大版内专家分月排行榜第二2016年2月 Java大版内专家分月排行榜第二2015年11月 Java大版内专家分月排行榜第二2015年10月 Java大版内专家分月排行榜第二
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。}