网络销售 在公众号开通微信支付里的微信支付里属于哪个行业?

很多学员在做小程序开发,公众号开发时,问子恒老师,用户小程序或者公众号里购买产品,他们支付的钱去哪里了呢?其实客户购买产品支付的钱会进入到你的账户中,商户号中的银行账号就是你公司的账号。微信商户号你可以在商户号后台看到你的资金使用情况,包括收入,支出,你还可以在这里给你的账号充值,用来发公众号红包,给员工发福利等。你开通微信公众号支付时,微信同时会帮你开通商户号。如果你想开发 微信支付/小程序支付加子恒老师助理QQ:了解详情想要了解更多,请观看子恒老师下面的视频课程。,观看《》视频教程如果你正在开发小程序或者公众号,,观看《》视频,,观看《》视频
小程序支付绑定服务号支付步骤,微信小程序支付绑定商户号支付
很多学员向子恒老师咨询“小程序支付怎么绑定服务号支付”
因为微信服务号支付,
是微信商户号的一个支付功能,
他们以前开通过,
所以希望把这个利用起来,
跟小程序支付绑定,
今天子恒老师来跟你详细分享...
微信小程序中实现微信支付
最近做小程序,涉及到微信支付,看了看微信小程序开发文档,尽管之前做过微信支付,还是有点懵逼,不过好在之前研究过,不然真的是无从下手。对比了一下发现,其实小程序中做支付比公众号支付要省事很多,因为不需要...
微信小程序web-view公众号与小程序支付的切换使用
微信小程序web-view公众号与小程序支付间的切换使用
最近小程序开放了新功能,支持内嵌网页有域名的那种,可以内嵌到小程序里了!
那么这意味着什么呢?你还需要开发独立开发官网小程...
小程序支付常见问题解答
近期,我们在后台收到粉丝提出的一些关于 “小程序支付” 的疑问和咨询,所以,本期的你问我答,将重点围绕
“小程序支付”相关的常见疑问进行解答。
小程序支付说明
小程序作为公众平台新的一种账号类...
微信小程序充值及充值回调后的处理
微信小程序的充值流程与 H5 或 公众号大致差不多,这里简单说一下前端在充值时候的一些操作流程。
用户在小程序中发起充值请求时,一般会先请求自己的服务器,将充值的参数发送给后端,然后后端会去请求...
最近在研究微信支付,感觉在微信里面买东西,直接微信支付还是蛮方便的,没有支付宝那么麻烦,刷刷朋友圈,顺便就买点东西,生活是如此的惬意,心想微信的这个支付肯定可以做到很牛逼,因为“钱景”无限...
微信商户号mchid哪里找
关于微信支付的流程问题,特别是对小白用户来说,那是真的一个“折腾”,如果没人带,或者没人指导,那再就……
网上文档一大堆,但如果不知道其中的逻辑,再多的文档,都是没用的。
直接说逻...
微信付款到零钱,可以直接将钱打入用户的“微信零钱”中,&em&微信支付&/em&将做零钱入账消息通知,零钱收支明细会展示相应记录,注意配置证书的位置,证书获取时间较长呀!!
*版权证明: 只允许上传png/jpeg/jpg/gif格式的图片,且小于3M
*详细原因:
交 &em&微信支付&/em&DEMO完整版 5积分 立即下载 ...
没有更多推荐了,当面付能不能像手机网站支付一样,可以在微信公众号内支付
作者:一念执着。c& | &更新于: 15:46:13
我看到手机网站支付是可以在微信发起支付的,但是我们现在的产品是我们作为服务商的,当然不想商户自己去签约手机网站支付,能不能说使用当面付解决这个问题,或者由服务商签约手机网站支付,商户就不用签约了
手机网站支付的接口服务商是可以代商户签约的 详细的请参考:还有 当面付是属于线下支付的接口
是不适用于手机移动端支付的
不建议你使用在移动端
:手机网站支付的接口服务商是可以代商户签约的 详细的请参考:还有 当面付是属于线下支付的接口
是不适用于手机移动端支付的
不建议你使用... 我想问下手机网站的流程:1.微信浏览器内-&2.在前台点击支付按钮-&3.跳转到展示请用浏览器打开的页面-&4.打开支付宝-&5.确认支付
在这些步骤中,我是不是只需要做2的步骤,发起支付即可,其它的都是支付宝完成的
:&p&我想问下手机网站的流程:1.微信浏览器内-&2.在前台点击支付按钮-&3.跳转到展示请用浏览器打开的页面-&4.打开支付宝-&5.确认支付&/p&
&p&在这些步骤中,我是不是只需要做2的步骤,发起支付即可,... 微信中支付的是会被微信拦截 导致无法支付的 应该是1.微信浏览器内点击支付;2.引导用户跳转出微信浏览器打开的页面;3.在跳转出来的页面提交支付请求唤起支付宝支付;4.买家输入密码完成支付 这里的步骤处理最后买家输入密码其他都是需要你这边自己来完成的
:微信中支付的是会被微信拦截 导致无法支付的 应该是1.微信浏览器内点击支付;2.引导用户跳转出微信浏览器打开的页面;3.在跳转出来的页面提交支付请求唤起支付宝支付;4.买家输入密码完成支付 这里的步骤处理最后买家输入密码其他都是需要你这边自... 我知道微信中使用支付宝支付会被拦截,我看了几遍手机网站的api了,但是有点不是很明白,在用户点击浏览器的时候,浏览器是怎么跳转到选择支付宝支付的页面,那条链接是怎么设置的
:我知道微信中使用支付宝支付会被拦截,我看了几遍手机网站的api了,但是有点不是很明白,在用户点击浏览器的时候,浏览器是怎么跳转到选择支付宝支付的页面,那条链接是怎么设置的 在浏览器再次提交请求字符串或是form表单& 就可以唤起支付宝支付的& 详细的建议参考:
这里下载demo:
:&p&在浏览器再次提交请求字符串或是form表单& 就可以唤起支付宝支付的& 详细的建议参考:&/p&
&p&&a href=&https://docs.open.alipay.com/203/105285/&&htt... 这个demo之前我看了,引导页里是只是一个提示页而已,怎么让浏览器跳转到post表单的页面不是很明白
:这个demo之前我看了,引导页里是只是一个提示页而已,怎么让浏览器跳转到post表单的页面不是很明白 您是说由微信浏览器跳转到其他浏览器页面是吗 ?这个是需要你自己处理的 建议你可以咨询一下微信 是否有相关的方法可以跳出微信 进入其他浏览器
:您是说由微信浏览器跳转到其他浏览器页面是吗 ?这个是需要你自己处理的 建议你可以咨询一下微信 是否有相关的方法可以跳出微信 进入其他浏览器
我的意思是假如我现在就在引导页了,那么我怎么在点击safari浏览器的时候去post表单数据,又或者说怎么跳转到指定的页面
:<img src="//alipaybbs.oss-cn-hangzhou.aliyuncs.com/1806/thread/55_18439_dd3eb75c2c3658a.jpg" alt="" width="350" heigh... 你这边成功跳转出微信浏览器& 您这边调用接口的时候是有生成请求参数的& 您把请求参数包括sign参数保存下来& &在微信外的浏览器 把这边参数提交到页面 然后提交 发起支付& 就可以唤起支付了&&
您需要登录后才可以回帖,
阅读数:16524
&&&&&&&1人回答
阅读数:11781
&&&&&&&10人回答
阅读数:8533
&&&&&&&17人回答
阅读数:7240
&&&&&&&2人回答
阅读数:6976
&&&&&&&17人回答
阅读数:6481
&&&&&&&1人回答
阅读数:6262
&&&&&&&5人回答
阅读数:3614
&&&&&&&8人回答
阅读数:3563
&&&&&&&0人回答
阅读数:3548
&&&&&&&12人回答
阅读数:3504
&&&&&&&3人回答
阅读数:3053
&&&&&&&3人回答
阅读数:2956
&&&&&&&18人回答
阅读数:2934
&&&&&&&2人回答
阅读数:2911
&&&&&&&12人回答
Copyright (C) 2017 杭州蚂蚁金服 | ICP证浙B2-急急急!在微信公众平台申请微信支付不知道要选择那种行业类型!提示要和营业执照上的经营范围在内!我的_百度知道
急急急!在微信公众平台申请微信支付不知道要选择那种行业类型!提示要和营业执照上的经营范围在内!我的
急急急!在微信公众平台申请微信支付不知道要选择那种行业类型!提示要和营业执照上的经营范围在内!我的营业执照的经营范围是广告设计、制作、发布!而选择行业缺没有我的这些!我该...
急急急!在微信公众平台申请微信支付不知道要选择那种行业类型!提示要和营业执照上的经营范围在内!我的营业执照的经营范围是广告设计、制作、发布!而选择行业缺没有我的这些!我该选择那种啊
&#xe6b9;答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
迷子很迷人
互联网类认证行家
迷子很迷人
互联网类行家
采纳数:922
获赞数:3809
在网络部门有5年从业经验,熟悉各种网络软件,和相关推广知识,现在博大教育负责微信平台推广及运营。
能申请微信支付这个事情比较重要,不同的行业都是不一样的,我原来申请门店的时候也是有一些没有,需当时我跟客服沟通他们是需要我去弄个申请。我建议你直接用qq找客服,克服选择的话是选微信公众平台,功能使用方面的,然后在下一个是选其他问题,他们客服回复的很快也很专业,希望可以帮到你。
高富通聚合支付
高富通聚合支付
采纳数:58
获赞数:155
要看你的网站是做什么服务的,如果是广告,选生活/咨询服务》广告/会展/活动策划
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。微信公众平台如何让客人在微信支付上购买我们的产品_百度知道
微信公众平台如何让客人在微信支付上购买我们的产品
用第三方产品可靠吗?钱好像花的不少呢.微团购不错.但是基本都是需要购买不知道哪些网站的产品,反正不像正规网站....
用第三方产品可靠吗?钱好像花的不少呢.微团购不错.但是基本都是需要购买不知道哪些网站的产品,反正不像正规网站.
&#xe6b9;答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
cici大美哥
互联网类认证行家
cici大美哥
互联网类行家
采纳数:456
获赞数:2027
云端科技年度优秀员工 云端科技运营主管 阳晨科技营销中心负责人
开通微信小店即可实现微信在线购买1、开通微信支付即可开通微信小店,微信小店展现方式和微店之类的网上商店一样,可以直接在线购买!2、打开公众平台添加“微信小店”功能插件 如图3、&&&&开通之后即可根据自己的需求来设置相应的模式、运费、展现方式!4、当客人打开微信进入商城 如图 点击即可购买
狮子座的吧
狮子座的吧
采纳数:25
获赞数:78
首先您需要注册一个微信公众账号,然后就需要使用一个第三方的平台,如:365微信管家
微盟等这些第三方平台,使用后既可以在微信上实现商品的买卖,支付平台现只支持支付宝支付。支付环境是有保障的,现使用第三方平台的行业非常多,但是当前还不完善,预计未来会非常多。2013年是电商元年,微信要超过淘宝、京东不是没有可能。
本回答被提问者和网友采纳
擅长:暂未定制
可以自己开发商城支付功能,可以让腾讯开发,也可以让第三方公司开发,很简单,你可以去看看首屏微信开发平台。
淘众福梵星
淘众福梵星
获赞数:24
擅长:暂未定制
微信公众平台 你要是享有这个功能貌似也只有使用开发者选项了 搞个机器人
其他1条回答
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。&&&&&&&&&&&&&&&&&&
posts - 146,comments - 133,trackbacks - 0
tenpay.dll:
MD5Util.cs
using System.Collections.G
using System.L
using System.T
using System.Security.C
namespace tenpay
public class MD5Util
public MD5Util()
// TODO: 在此处添加构造函数逻辑
/** 获取大写的MD5签名结果 */
public static string GetMD5(string encypStr, string charset)
string retS
MD5CryptoServiceProvider m5 = new MD5CryptoServiceProvider();
//创建md5对象
byte[] inputB
byte[] outputB
//使用GB2312编码方式把字符串转化为字节数组.
inputBye = Encoding.GetEncoding(charset).GetBytes(encypStr);
catch (Exception ex)
inputBye = Encoding.GetEncoding("GB2312").GetBytes(encypStr);
outputBye = m5.ComputeHash(inputBye);
retStr = System.BitConverter.ToString(outputBye);
retStr = retStr.Replace("-", "").ToUpper();
return retS
OrderDetail.cs
using System.Collections.G
using System.L
using System.T
namespace tenpay
/// &summary&
/// 微信订单明细实体对象
/// &/summary&
[Serializable]
public class OrderDetail
/// &summary&
/// 返回状态码,SUCCESS/FAIL 此字段是通信标识,非交易标识,交易是否成功需要查看trade_state来判断
/// &/summary&
public string return_code = "";
/// &summary&
/// 返回信息返回信息,如非空,为错误原因 签名失败 参数格式校验错误
/// &/summary&
public string return_msg = "";
/// &summary&
/// 公共号ID(微信分配的公众账号 ID)
/// &/summary&
public string appid = "";
/// &summary&
/// 商户号(微信支付分配的商户号)
/// &/summary&
public string mch_id = "";
/// &summary&
/// 随机字符串,不长于32位
/// &/summary&
public string nonce_str = "";
/// &summary&
/// &/summary&
public string sign = "";
/// &summary&
/// 业务结果,SUCCESS/FAIL
/// &/summary&
public string result_code = "";
/// &summary&
/// 错误代码
/// &/summary&
public string err_code = "";
/// &summary&
/// 错误代码描述
/// &/summary&
public string err_code_des = "";
/// &summary&
/// 交易状态
///SUCCESS&支付成功
///REFUND&转入退款
///NOTPAY&未支付
///CLOSED&已关闭
///REVOKED&已撤销
///USERPAYING--用户支付中
///NOPAY--未支付(输入密码或确认支付超时) PAYERROR--支付失败(其他原因,如银行返回失败)
/// &/summary&
public string trade_state = "";
/// &summary&
/// 微信支付分配的终端设备号
/// &/summary&
public string device_info = "";
/// &summary&
/// 用户在商户appid下的唯一标识
/// &/summary&
public string openid = "";
/// &summary&
/// 用户是否关注公众账号,Y-关注,N-未关注,仅在公众账号类型支付有效
/// &/summary&
public string is_subscribe = "";
/// &summary&
/// 交易类型,JSAPI、NATIVE、MICROPAY、APP
/// &/summary&
public string trade_type = "";
/// &summary&
/// 银行类型,采用字符串类型的银行标识
/// &/summary&
public string bank_type = "";
/// &summary&
/// 订单总金额,单位为分
/// &/summary&
public string total_fee = "";
/// &summary&
/// 现金券支付金额&=订单总金额,订单总金额-现金券金额为现金支付金额
/// &/summary&
public string coupon_fee = "";
/// &summary&
/// 货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY
/// &/summary&
public string fee_type = "";
/// &summary&
/// 微信支付订单号
/// &/summary&
public string transaction_id = "";
/// &summary&
/// 商户系统的订单号,与请求一致。
/// &/summary&
public string out_trade_no = "";
/// &summary&
/// 商家数据包,原样返回
/// &/summary&
public string attach = "";
/// &summary&
/// 支付完成时间,格式为yyyyMMddhhmmss,如日9点10分10秒表示为10。
/// 时区为GMT+8 beijing。该时间取自微信支付服务器
/// &/summary&
public string time_end = "";
QueryOrder.cs
using System.Collections.G
using System.L
using System.T
namespace tenpay
/// &summary&
/// 微信订单查询接口请求实体对象
/// &/summary&
[Serializable]
public class QueryOrder
/// &summary&
/// 公共号ID(微信分配的公众账号 ID)
/// &/summary&
public string appid = "";
/// &summary&
/// 商户号(微信支付分配的商户号)
/// &/summary&
public string mch_id = "";
/// &summary&
/// 微信订单号,优先使用
/// &/summary&
public string transaction_id = "";
/// &summary&
/// 商户系统内部订单号
/// &/summary&
public string out_trade_no = "";
/// &summary&
/// 随机字符串,不长于 32 位
/// &/summary&
public string nonce_str = "";
/// &summary&
/// 签名,参与签名参数:appid,mch_id,transaction_id,out_trade_no,nonce_str,key
/// &/summary&
public string sign = "";
UnifiedOrder.cs
using System.Collections.G
using System.L
using System.T
namespace tenpay
/// &summary&
/// 微信统一接口请求实体对象
/// &/summary&
[Serializable]
public class UnifiedOrder
/// &summary&
/// 公共号ID(微信分配的公众账号 ID)
/// &/summary&
public string appid = "";
/// &summary&
/// 商户号(微信支付分配的商户号)
/// &/summary&
public string mch_id = "";
/// &summary&
/// 微信支付分配的终端设备号
/// &/summary&
public string device_info = "";
/// &summary&
/// 随机字符串,不长于 32 位
/// &/summary&
public string nonce_str = "";
/// &summary&
/// &/summary&
public string sign = "";
/// &summary&
/// 商品描述
/// &/summary&
public string body = "";
/// &summary&
/// 附加数据,原样返回
/// &/summary&
public string attach = "";
/// &summary&
/// 商户系统内部的订单号,32个字符内、可包含字母,确保在商户系统唯一,详细说明
/// &/summary&
public string out_trade_no = "";
/// &summary&
/// 订单总金额,单位为分,不能带小数点
/// &/summary&
public int total_fee = 0;
/// &summary&
/// 终端IP
/// &/summary&
public string spbill_create_ip = "";
/// &summary&
/// 订 单 生 成 时 间 , 格 式 为yyyyMMddHHmmss,如 2009 年12 月 25 日 9 点 10 分 10 秒表示为 10。时区为 GMT+8 beijing。该时间取自商户服务器
/// &/summary&
public string time_start = "";
/// &summary&
/// 交易结束时间
/// &/summary&
public string time_expire = "";
/// &summary&
/// 商品标记 商品标记,该字段不能随便填,不使用请填空,使用说明详见第 5 节
/// &/summary&
public string goods_tag = "";
/// &summary&
/// 接收微信支付成功通知
/// &/summary&
public string notify_url = "";
/// &summary&
/// JSAPI、NATIVE、APP
/// &/summary&
public string trade_type = "";
/// &summary&
/// 用户标识 trade_type 为 JSAPI时,此参数必传
/// &/summary&
public string openid = "";
/// &summary&
/// 只在 trade_type 为 NATIVE时需要填写。
/// &/summary&
public string product_id = "";
TenpayUtil.cs
using System.Collections.G
using System.L
using System.T
using System.X
namespace tenpay
public class TenpayUtil
/// &summary&
/// 统一支付接口
/// &/summary&
const string UnifiedPayUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder";
/// &summary&
/// 网页授权接口
/// &/summary&
const string access_tokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token";
/// &summary&
/// 微信订单查询接口
/// &/summary&
const string OrderQueryUrl = "https://api.mch.weixin.qq.com/pay/orderquery";
/// &summary&
/// 随机串
/// &/summary&
public static string getNoncestr()
Random random = new Random();
return MD5Util.GetMD5(random.Next(1000).ToString(), "GBK").ToLower().Replace("s", "S");
/// &summary&
/// 时间截,自1970年以来的秒数
/// &/summary&
public static string getTimestamp()
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
return Convert.ToInt64(ts.TotalSeconds).ToString();
/// &summary&
/// 网页授权接口
/// &/summary&
public static string getAccess_tokenUrl()
return access_tokenU
/// &summary&
/// 获取微信签名
/// &/summary&
/// &param name="sParams"&&/param&
/// &returns&&/returns&
public string getsign(SortedDictionary&string, string& sParams, string key)
int i = 0;
string sign = string.E
StringBuilder sb = new StringBuilder();
foreach (KeyValuePair&string, string& temp in sParams)
if (temp.Value == "" || temp.Value == null || temp.Key.ToLower() == "sign")
sb.Append(temp.Key.Trim() + "=" + temp.Value.Trim() + "&");
sb.Append("key=" + key.Trim() + "");
string signkey = sb.ToString();
sign = MD5Util.GetMD5(signkey, "utf-8");
/// &summary&
/// post数据到指定接口并返回数据
/// &/summary&
public string PostXmlToUrl(string url, string postData)
string returnmsg = "";
using (System.Net.WebClient wc = new System.Net.WebClient())
returnmsg = wc.UploadString(url, "POST", postData);
/// &summary&
/// 获取prepay_id
/// &/summary&
public string getPrepay_id(UnifiedOrder order, string key)
string prepay_id = "";
string post_data = getUnifiedOrderXml(order, key);
string request_data = PostXmlToUrl(UnifiedPayUrl, post_data);
SortedDictionary&string, string& requestXML = GetInfoFromXml(request_data);
foreach (KeyValuePair&string, string& k in requestXML)
if (k.Key == "prepay_id")
prepay_id = k.V
return prepay_
/// &summary&
/// 获取微信订单明细
/// &/summary&
public OrderDetail getOrderDetail(QueryOrder queryorder, string key)
string post_data = getQueryOrderXml(queryorder, key);
string request_data = PostXmlToUrl(OrderQueryUrl, post_data);
OrderDetail orderdetail = new OrderDetail();
SortedDictionary&string, string& requestXML = GetInfoFromXml(request_data);
foreach (KeyValuePair&string, string& k in requestXML)
switch (k.Key)
case "retuen_code":
orderdetail.result_code = k.V
case "return_msg":
orderdetail.return_msg = k.V
case "appid":
orderdetail.appid = k.V
case "mch_id":
orderdetail.mch_id = k.V
case "nonce_str":
orderdetail.nonce_str = k.V
case "sign":
orderdetail.sign = k.V
case "result_code":
orderdetail.result_code = k.V
case "err_code":
orderdetail.err_code = k.V
case "err_code_des":
orderdetail.err_code_des = k.V
case "trade_state":
orderdetail.trade_state = k.V
case "device_info":
orderdetail.device_info = k.V
case "openid":
orderdetail.openid = k.V
case "is_subscribe":
orderdetail.is_subscribe = k.V
case "trade_type":
orderdetail.trade_type = k.V
case "bank_type":
orderdetail.bank_type = k.V
case "total_fee":
orderdetail.total_fee = k.V
case "coupon_fee":
orderdetail.coupon_fee = k.V
case "fee_type":
orderdetail.fee_type = k.V
case "transaction_id":
orderdetail.transaction_id = k.V
case "out_trade_no":
orderdetail.out_trade_no = k.V
case "attach":
orderdetail.attach = k.V
case "time_end":
orderdetail.time_end = k.V
/// &summary&
/// 把XML数据转换为SortedDictionary&string, string&集合
/// &/summary&
/// &param name="strxml"&&/param&
/// &returns&&/returns&
protected SortedDictionary&string, string& GetInfoFromXml(string xmlstring)
SortedDictionary&string, string& sParams = new SortedDictionary&string, string&();
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlstring);
XmlElement root = doc.DocumentE
int len = root.ChildNodes.C
for (int i = 0; i & i++)
string name = root.ChildNodes[i].N
if (!sParams.ContainsKey(name))
sParams.Add(name.Trim(), root.ChildNodes[i].InnerText.Trim());
/// &summary&
/// 微信统一下单接口xml参数整理
/// &/summary&
/// &param name="order"&微信支付参数实例&/param&
/// &param name="key"&密钥&/param&
/// &returns&&/returns&
protected string getUnifiedOrderXml(UnifiedOrder order, string key)
string return_string = string.E
SortedDictionary&string, string& sParams = new SortedDictionary&string, string&();
sParams.Add("appid", order.appid);
sParams.Add("attach", order.attach);
sParams.Add("body", order.body);
sParams.Add("device_info", order.device_info);
sParams.Add("mch_id", order.mch_id);
sParams.Add("nonce_str", order.nonce_str);
sParams.Add("notify_url", order.notify_url);
sParams.Add("openid", order.openid);
sParams.Add("out_trade_no", order.out_trade_no);
sParams.Add("spbill_create_ip", order.spbill_create_ip);
sParams.Add("total_fee", order.total_fee.ToString());
sParams.Add("trade_type", order.trade_type);
order.sign = getsign(sParams, key);
sParams.Add("sign", order.sign);
//拼接成XML请求数据
StringBuilder sbPay = new StringBuilder();
foreach (KeyValuePair&string, string& k in sParams)
if (k.Key == "attach" || k.Key == "body" || k.Key == "sign")
sbPay.Append("&" + k.Key + "&&![CDATA[" + k.Value + "]]&&/" + k.Key + "&");
sbPay.Append("&" + k.Key + "&" + k.Value + "&/" + k.Key + "&");
return_string = string.Format("&xml&{0}&/xml&", sbPay.ToString());
byte[] byteArray = Encoding.UTF8.GetBytes(return_string);
return_string = Encoding.GetEncoding("GBK").GetString(byteArray);
return return_
/// &summary&
/// 微信订单查询接口XML参数整理
/// &/summary&
/// &param name="queryorder"&微信订单查询参数实例&/param&
/// &param name="key"&密钥&/param&
/// &returns&&/returns&
protected string getQueryOrderXml(QueryOrder queryorder, string key)
string return_string = string.E
SortedDictionary&string, string& sParams = new SortedDictionary&string, string&();
sParams.Add("appid", queryorder.appid);
sParams.Add("mch_id", queryorder.mch_id);
sParams.Add("transaction_id", queryorder.transaction_id);
sParams.Add("out_trade_no", queryorder.out_trade_no);
sParams.Add("nonce_str", queryorder.nonce_str);
queryorder.sign = getsign(sParams, key);
sParams.Add("sign", queryorder.sign);
//拼接成XML请求数据
StringBuilder sbPay = new StringBuilder();
foreach (KeyValuePair&string, string& k in sParams)
if (k.Key == "attach" || k.Key == "body" || k.Key == "sign")
sbPay.Append("&" + k.Key + "&&![CDATA[" + k.Value + "]]&&/" + k.Key + "&");
sbPay.Append("&" + k.Key + "&" + k.Value + "&/" + k.Key + "&");
return_string = string.Format("&xml&{0}&/xml&", sbPay.ToString().TrimEnd(','));
return return_
&看官网例子:
function onBridgeReady(){
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId" : "wx0ec43b",
//公众号名称,由商户传入
"timeStamp":" ",
//时间戳,自1970年以来的秒数
"nonceStr" : "e61463f8efacccfbbb444", //随机串
"package" : "prepay_id=u802345jgfjsdfgsdg888",
"signType" : "MD5",
//微信签名方式:
"paySign" : "70EABB79628FBCAFADD89" //微信签名
function(res){
if(res.err_msg == "get_brand_wcpay_request:ok" ) {}
// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回
ok,但并不保证它绝对可靠。
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
onBridgeReady();
主要是prepay_id和paySign的获取。类库tenpay.dll的作用就是获取这两个东西的。
大致流程:获取公众号的code&&》获取预定单号的openid&&》获取prepay_id。
1.根据自己的业务逻辑生成内部订单
protected void btnPay_Click(object sender, EventArgs e)
if (Fetch.GetUserCookie() == null)
Response.Redirect("/App/Login.aspx?url=/App/indexPay.aspx");
int salePrice = Utility.StrToInt(OrderAmount, 0);
OnLineOrder onlineOrder = new OnLineOrder();
onlineOrder.ShareID = 13;
onlineOrder.OrderID = PayHelper.GetOrderIDByPrefix("WX");
#region 订单处理
if (Fetch.GetUserCookie() == null)
onlineOrder.OperUserID = 0;
onlineOrder.OperUserID = Fetch.GetUserCookie().UserID;
onlineOrder.Accounts = Fetch.GetUserCookie().A
onlineOrder.CardTotal = 1;
onlineOrder.CardTypeID = salePrice / 10; //& 30 ? 1 : salePrice & 60 ? 2 : salePrice & 120 ? 3 : 4;
onlineOrder.OrderAmount = saleP
onlineOrder.IPAddress = GameRequest.GetUserIP();
//生成订单
Message umsg = treasureFacade.RequestOrder(onlineOrder);
if (!umsg.Success)
RenderAlertInfo(true, umsg.Content, 2);
#endregion
//发起微信支付
Response.Redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid=你的公众号appid&redirect_uri=http://你的网站/App/Pay/PayOrder.aspx?showwxpaytitle=1&response_type=code&scope=snsapi_base&state=" + OrderAmount + "_" + onlineOrder.OrderID + "#wechat_redirect");
2.进入公众号配置网页授权获取用户基本信息
这样配置后就可以调用微信的接口获取到公众号的code
Response.Redirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid=你的公众号appid&redirect_uri=http://你的网站/App/Pay/PayOrder.aspx?showwxpaytitle=1&response_type=code&scope=snsapi_base&state=" + OrderAmount + "_" + onlineOrder.OrderID + "#wechat_redirect");
访问https://open.weixin.qq.com/connect/oauth2/authorize接口,成功后会跳转到设置的redirect_uri页面,其中会包含code参数,接下来就到redirect_uri页面(我这里就是PayOrder.aspx了)简单的获取code参数:
using System.Collections.G
using System.L
using System.W
using System.Web.UI;
using System.Web.UI.WebC
using Game.U
using System.Web.Script.S
using System.C
using System.T
public partial class App_Pay_PayOrder : System.Web.UI.Page
protected string code = GameRequest.GetQueryString("code");
protected string state = GameRequest.GetQueryString("state");
protected string OrderAmount = "";
protected string OrderID = "";
protected string OrderTime = "";
protected string OrderGive = "";
protected string ImagePath = "";
protected string appId = "";
protected string timeStamp = "";
protected string nonceStr = "";
protected string prepay_id = "";
protected string paySign = "";
protected void Page_Load(object sender, EventArgs e)
LoadOrder();
private void LoadOrder()
string[] values = state.Split('_');
if (values.Length == 2)
OrderAmount = values[0];
OrderID = values[1];
OrderTime = (new DataControl()).SelectValue("select ApplayDate from OnLineOrder where OrderId='" + OrderID + "'", "DBTreasure", "").ToString();
ImagePath = (new DataControl()).SelectValue("select ImagePath from CartTypeImage where CardTypeId=" + OrderAmount, "DBTreasure", "").ToString();
public struct authorization
public string access_token { get; set; }
//属性的名字,必须与json格式字符串中的"key"值一样。
public string expires_in { get; set; }
public string refresh_token { get; set; }
public string openid { get; set; }
public string scope { get; set; }
protected void btnPay_Click(object sender, EventArgs e)
TenpayUtil tenpay = new TenpayUtil();
string paySignKey = ConfigurationManager.AppSettings["paySignKey"].ToString();
string AppSecret = ConfigurationManager.AppSettings["AppSecret"].ToString();
string mch_id = ConfigurationManager.AppSettings["mch_id"].ToString();
appId = ConfigurationManager.AppSettings["AppId"].ToString();
string post_data = "appid=" + appId + "&secret=" + AppSecret + "&code=" + code + "&grant_type=authorization_code";
string requestData = tenpay.PostXmlToUrl(TenpayUtil.getAccess_tokenUrl(), post_data);
JavaScriptSerializer js = new JavaScriptSerializer();
//实例化一个能够序列化数据的类
authorization auth = js.Deserialize&authorization&(requestData);
//将json数据转化为对象类型并赋值给auth
UnifiedOrder order = new UnifiedOrder();
order.appid = appId;
order.attach = "vinson";
order.body = OrderAmount + "拍币";
order.device_info = "";
order.mch_id = mch_
order.nonce_str = TenpayUtil.getNoncestr();
order.notify_url = "http://你的网站/App/Shop/pay.aspx";
order.openid = auth.
order.out_trade_no = OrderID;
order.trade_type = "JSAPI";
order.spbill_create_ip = Page.Request.UserHostA
order.total_fee = int.Parse(OrderAmount) * 100;
//order.total_fee = 1;
prepay_id = tenpay.getPrepay_id(order, paySignKey);
timeStamp = TenpayUtil.getTimestamp();
nonceStr = TenpayUtil.getNoncestr();
SortedDictionary&string, string& sParams = new SortedDictionary&string, string&();
sParams.Add("appId", appId);
sParams.Add("timeStamp", timeStamp);
sParams.Add("nonceStr", nonceStr);
sParams.Add("package", "prepay_id=" + prepay_id);
sParams.Add("signType", "MD5");
paySign = tenpay.getsign(sParams, paySignKey);
catch (Exception ex)
Response.Write(ex.ToString());
Response.Redirect("http://你的网站/App/Pay/pay.aspx?showwxpaytitle=1&appId=" + appId + "&timeStamp=" + timeStamp + "&nonceStr=" + nonceStr + "&prepay_id=" + prepay_id + "&signType=MD5&paySign=" + paySign + "&OrderID=" + OrderID);
protected string code = GameRequest.GetQueryString("code");
就获取到了传过来的code参数。
然后调用网页授权接口https://api.weixin.qq.com/sns/oauth2/access_token 获取openid
这个接口返回的数据是json类型的,使用JavaScriptSerializer类和结构体把openid取出:
public struct authorization
public string access_token { get; set; }
//属性的名字,必须与json格式字符串中的"key"值一样。
public string expires_in { get; set; }
public string refresh_token { get; set; }
public string openid { get; set; }
public string scope { get; set; }
TenpayUtil tenpay = new TenpayUtil();
string paySignKey = ConfigurationManager.AppSettings["paySignKey"].ToString();
string AppSecret = ConfigurationManager.AppSettings["AppSecret"].ToString();
string mch_id = ConfigurationManager.AppSettings["mch_id"].ToString();
appId = ConfigurationManager.AppSettings["AppId"].ToString();
string post_data = "appid=" + appId + "&secret=" + AppSecret + "&code=" + code + "&grant_type=authorization_code";
string requestData = tenpay.PostXmlToUrl(TenpayUtil.getAccess_tokenUrl(), post_data);
JavaScriptSerializer js = new JavaScriptSerializer();
//实例化一个能够序列化数据的类
authorization auth = js.Deserialize&authorization&(requestData);
//将json数据转化为对象类型并赋值给auth
AppId和AppSecret是公众号里面给的,mch_id是通过微信支付申请后微信发邮件给的,paySignKey是自己设置的证书密阴
TenpayUtil.getAccess_tokenUrl()="https://api.weixin.qq.com/sns/oauth2/access_token"
这样转化后就可以得到openid
order.openid = auth.
终于到重头戏获取prepay_id了
UnifiedOrder order = new UnifiedOrder();
order.appid = appId;
order.attach = "vinson";
order.body = OrderAmount + "拍币";
order.device_info = "";
order.mch_id = mch_
order.nonce_str = TenpayUtil.getNoncestr();
order.notify_url = "http://你的网站/App/Shop/pay.aspx";
order.openid = auth.
order.out_trade_no = OrderID;
order.trade_type = "JSAPI";
order.spbill_create_ip = Page.Request.UserHostA
order.total_fee = int.Parse(OrderAmount) * 100;
//order.total_fee = 1;
prepay_id = tenpay.getPrepay_id(order, paySignKey);
对象类型UnifiedOrder方便把多个参数融合一个对象中,看看tenpay.getPrepay_id(order, paySignKey)方法:
/// &summary&
/// 获取prepay_id
/// &/summary&
public string getPrepay_id(UnifiedOrder order, string key)
string prepay_id = "";
string post_data = getUnifiedOrderXml(order, key);
string request_data = PostXmlToUrl(UnifiedPayUrl, post_data);
SortedDictionary&string, string& requestXML = GetInfoFromXml(request_data);
foreach (KeyValuePair&string, string& k in requestXML)
if (k.Key == "prepay_id")
prepay_id = k.V
return prepay_
接口UnifiedPayUrl="https://api.mch.weixin.qq.com/pay/unifiedorder"
这个接口的参数是xml格式的,返回来的数据也是xml格式的
/// &summary&
/// 微信统一下单接口xml参数整理
/// &/summary&
/// &param name="order"&微信支付参数实例&/param&
/// &param name="key"&密钥&/param&
/// &returns&&/returns&
protected string getUnifiedOrderXml(UnifiedOrder order, string key)
string return_string = string.E
SortedDictionary&string, string& sParams = new SortedDictionary&string, string&();
sParams.Add("appid", order.appid);
sParams.Add("attach", order.attach);
sParams.Add("body", order.body);
sParams.Add("device_info", order.device_info);
sParams.Add("mch_id", order.mch_id);
sParams.Add("nonce_str", order.nonce_str);
sParams.Add("notify_url", order.notify_url);
sParams.Add("openid", order.openid);
sParams.Add("out_trade_no", order.out_trade_no);
sParams.Add("spbill_create_ip", order.spbill_create_ip);
sParams.Add("total_fee", order.total_fee.ToString());
sParams.Add("trade_type", order.trade_type);
order.sign = getsign(sParams, key);
sParams.Add("sign", order.sign);
//拼接成XML请求数据
StringBuilder sbPay = new StringBuilder();
foreach (KeyValuePair&string, string& k in sParams)
if (k.Key == "attach" || k.Key == "body" || k.Key == "sign")
sbPay.Append("&" + k.Key + "&&![CDATA[" + k.Value + "]]&&/" + k.Key + "&");
sbPay.Append("&" + k.Key + "&" + k.Value + "&/" + k.Key + "&");
return_string = string.Format("&xml&{0}&/xml&", sbPay.ToString());
byte[] byteArray = Encoding.UTF8.GetBytes(return_string);
return_string = Encoding.GetEncoding("GBK").GetString(byteArray);
return return_
所有参数准备完毕,就剩下最后的微信签名paySign了:
prepay_id = tenpay.getPrepay_id(order, paySignKey);
timeStamp = TenpayUtil.getTimestamp();
nonceStr = TenpayUtil.getNoncestr();
SortedDictionary&string, string& sParams = new SortedDictionary&string, string&();
sParams.Add("appId", appId);
sParams.Add("timeStamp", timeStamp);
sParams.Add("nonceStr", nonceStr);
sParams.Add("package", "prepay_id=" + prepay_id);
sParams.Add("signType", "MD5");
paySign = tenpay.getsign(sParams, paySignKey);
这里要注意了:appId这些参数的大小写一定要和js那边的参数大小写一致!稍微有所不同都会提示&商户签名错误&。
&script type="text/javascript"&
var appId = "&%=appId %&";
var timeStamp = "&%=timeStamp %&";
var nonceStr = "&%=nonceStr %&";
var prepay_id = "&%=prepay_id %&";
var paySign = "&%=paySign %&";
var OrderID="&%=OrderID %&";
//alert("appId:" + appId + ",timeStamp:" + timeStamp + ",nonceStr:" + nonceStr + ",prepay_id:" + prepay_id + ",paySign:" + paySign);
function onBridgeReady() {
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId": appId,
//公众号名称,由商户传入
"timeStamp": timeStamp,
//时间戳,自1970年以来的秒数
"nonceStr": nonceStr, //随机串
"package": "prepay_id=" + prepay_id,
"signType": "MD5",
//微信签名方式:
"paySign": paySign //微信签名
function (res) {
if (res.err_msg == "get_brand_wcpay_request:ok") {
$(function () {
contentType: "application/json",
url: "/WS/vinson.asmx/payWeiXin",
data: "{OrderID:'" + OrderID + "'}",
type: "POST",
dataType: "json",
success: function (json) {
json = eval("(" + json.d + ")");
if (json.success == "success") {
$("#tip").text("支付成功,正在跳转......");
window.location = "http://你的网站/App/Shop/successful.aspx";
$("#tip").text(json.msg);
alert(json.msg);
window.location = "http://你的网站/App/indexPay.aspx";
error: function (err, ex) {
alert(err.responseText);
// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回
ok,但并不保证它绝对可靠。
alert("交易取消");
window.location="http://www.你的网站.cn/App/indexPay.aspx";
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
} else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
onBridgeReady();
要发起微信支付,还要到公众号设置支付授权目录:
一切准备就绪,就可以真正的发起微信支付了:
阅读(...) 评论()}

我要回帖

更多关于 微信支付强制关注公众号 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信