微信支付开发流程

授人以鱼不如授人以渔

微信支付开发流程

下面以PHP语言为例,对微信支付的开发流程进行一下说明。

1.获取订单信息

2.根据订单信息和支付相关的账号生成sign,并且生成支付参数

3.将支付参数信息POST到微信服务器,获取返回信息

4.根据返回信息生成相应的支付代码(微信内部)或是支付二维码(非微信内),完成支付。

下面分步骤的讲一下:

1.微信支付中相关的必须的订单参数有三个,分别是:body(商品名或订单描述),out_trade_no(一般为订单号)和total_fee(订单金额,单位“分”,要注意单位问题),在不同的应用中,首先要做的就是获取订单中的相关信息,为支付参数生成做准备。

2.其他必须的支付参数有 appid(微信appid),mch_id(申请成功后告知),device_info(web端和微信端该参数都是统一的,为大写的”WEB“),trade_type(根据使用场景不同,该值也是不同的,微信外部为”NATIVE“,微信内部为”JSAPI“),nonce_str(32位随机字符串),spbill_create_ip(发起支付的终端IP,即服务器IP),notify_url(支付回调地址,微信服务器通知网站支付完成与否,修改订单状态),sign(签名),还有一个需要说明的地方,如果trade_type为JSAPI的话,openid为必填的参数。

签名算法是比较容易出错的地方,在于签名步骤繁琐,其实很关键的是,sign不参与签名

?A:将1、2中提到的除sign外的参数赋值,放到一个数组array里面,按照字典顺序排序,其实就是键值按照A—Z的顺序进行排序。

B:将数组转换成字符串string,格式为 k1=v1&k2=v2&...kN=vN

C:在此string后加上KEY值(在微信支付商户后台用户自己设定的)现在string = k1=v1&k2=v2&...kN=vN&key=KEY。

D:string = md5(string)

E: sign = strtoupper(string)

至此,sign生成完毕。

将sign添加到array数组里面生成新的数组。将该数组转换为XML。至此,微信支付的参数准备工作完成。

3.将2中生成的XML,使用POST的方式发送请求到微信(https://api.mch.weixin.qq.com/pay/unifiedorder),获取返回的XML信息,将该信息转换成数组格式方便操作。返回的XML信息如下:

<xml>
   <return_code><![CDATA[SUCCESS]]></return_code>
   <return_msg><![CDATA[OK]]></return_msg>
   <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
   <mch_id><![CDATA[10000100]]></mch_id>
   <nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>
   <sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>
   <result_code><![CDATA[SUCCESS]]></result_code>
   <prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id>
   <trade_type><![CDATA[JSAPI]]></trade_type>
</xml>

如果是trade_type==native支付的话,还会多一个参数code_url,该URL为微信扫码支付的地址。

4.下面就是支付的过程了。

如果trade_type==native,那么使用一些方式将code_url转换成二维码,使用微信扫码就可以了,如果是微信内部点击支付的话,需要调用微信js-sdk中的相关东西,这一步中最关键是生成一个json格式的字符串。

首先要生成转换json字符串的数组array_jsapi。

A:该数组的参数包括:appId,timeStamp,nonceStr,package,signType(默认为”MD5“),要注意大小写和上面的数组里面是不一样的。

B:使用该数组生成paySign参数,签名方式同上。

C:将paySign参数追加到array_jsapi数组中。

D:将该数组使用json_encode格式化为字符串js_string。

完成上面的工作,就可以在微信内部进行支付了。

下面为相关支付的示例代码:

<script type=‘text/javascript‘>
	                                function jsApiCall()
					{
						WeixinJSBridge.invoke(
							‘getBrandWCPayRequest‘,
							$js_string,
							function(res){
								WeixinJSBridge.log(res.err_msg);
									if(res.err_msg==‘get_brand_wcpay_request:ok‘)
									{
										alert(‘支付成功‘);
									}
									else
									{
										alert(‘支付失败‘);
									}
							}
						);
					}
					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);
						    }
						}else{
						    jsApiCall();
						}
					}
				</script>

代码中js_string即为我们生成的字符串。

HTML代码中调用callpay()函数发起支付。

这样微信支付的支付工作就完成了。

下面是回调工作,该功能确保订单支付成功后,有正确的状态显示给用户。

支付完成后,微信使用POST请求,将支付结果反馈给网站服务器,网站服务器获取POST信息,根据支付成功与否,来确定是否修改订单信息。

A:将POST参数中的sign去除,并且记录下来该值。

B:对剩余的参数进行签名

C:将签名结果和POST中的sign进行比对,相同说明签名正确,根据支付结果修改订单状态。

E:返回XML信息给微信,确保微信知道网站已经收到该通知,避免微信再次推送POST,示例如下:

<xml>
  <return_code><![CDATA[SUCCESS]]></return_code>
  <return_msg><![CDATA[OK]]></return_msg>
</xml>

如果失败,则返回

<xml>
  <return_code><![CDATA[FAIL]]></return_code>
  <return_msg><![CDATA[失败原因]]></return_msg>
</xml>

至此,微信支付的整个开发介绍完毕。

有任何疑问,请联系QQ:97695870

时间: 2024-10-12 20:38:34

微信支付开发流程的相关文章

微信支付开发流程(1/2)

授人以鱼不如授人以渔 微信支付开发流程 下面以PHP语言为例,对微信支付的开发流程进行一下说明. 1.获取订单信息 2.根据订单信息和支付相关的账号生成sign,并且生成支付参数 3.将支付参数信息POST到微信服务器,获取返回信息 4.根据返回信息生成相应的支付代码(微信内部)或是支付二维码(非微信内),完成支付. 下面分步骤的讲一下: 1.微信支付中相关的必须的订单参数有三个,分别是:body(商品名或订单描述),out_trade_no(一般为订单号)和total_fee(订单金额,单位“

微信支付开发流程以及遇到的一些问题

1.微信开发者中后台服务器配置----->测试网站是否连通[若虚拟目录,URL可以不必配到虚拟目录下的路径] 2.微信开发者中心----->设置授权回调页面域名.JS接口安全域名.业务域名 3.微信支付开发配置 4.微信商户后台----->API安全----->设置API密钥

tp5 微信支付开发流程

1.用户在选择商品后,向APi提交包含它所选择商品的相关信息. 2.APi在接收到信息后,需要检查订单相关商品的库存量. 3.有库存,把订单数据存入数据库中= 下单成功了,返回客户端消息,告诉客户端可以支付了 4.调用自己的支付接口,进行支付. 5.还需要再次进行库存量检测 6.服务器这边就可以调用微信的支付接口进行支付 7.微信会返回给我们一个支付结果(异步) 8.成功:也需要进行库存量的检验. 9.成功:进行库存量的扣除. 原文地址:https://www.cnblogs.com/vip-d

微信支付开发 c# SDK JSAPI支付开发的流程和微信大坑

微信支付开发流程 1. 开通微信支付功能 省略 2. 下载微信的C#版的微信SDK 下载连接:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 各个版本的都有,可惜咱最熟悉C# 我的下载时间是2016-02-28日,所以所有的流程都是基于这个版本的SDK. 3. 配置各种参数 首先在微信支付的开发配置中配置发起支付的路径如下: 代码的solution中找到lib的config.cs文件,如下图,所有的参数都在这里,这里配置

PHP微信支付开发实例

这篇文章主要为大家详细介绍了PHP微信支付开发过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 PHP微信支付开发过程,分享给大家,供大家参考,具体内容如下 1.开发环境 Thinkphp 3.2.3 微信:服务号,已认证 开发域名:http://test.paywechat.com (自定义的域名,外网不可访问) 2.需要相关文件和权限 微信支付需申请开通 微信公众平台开发者文档:http://mp.weixin.qq.com/wiki/home/index.html 微信支付开发者文档

PHP微信支付开发

1.开发环境 Thinkphp 3.2.3 微信:服务号,已认证 开发域名:http://test.paywechat.com (自定义的域名,外网不可访问) 2.需要相关文件和权限 微信支付需申请开通 微信公众平台开发者文档:http://mp.weixin.qq.com/wiki/home/index.html 微信支付开发者文档:https://pay.weixin.qq.com/wiki/doc/api/index.html 微信支付SDK下载地址:https://pay.weixin.

微信支付开发:10分钟帮你开通微信支付免充值代金券和免充值立减与折扣,申请微信免充值代金券,社交立减金

---恢复内容开始--- 功能介绍: 商户不需要预先充值营销经费,即可创建和激活免充值代金券活动.活动生效后,用户到店使用微信支付,当订单符合优惠规则时,会直接扣减核销优惠商户的订单实收金额. 免充值,营销资金"0"占用不需要预充值营销经费,即可创建代金券优惠活动.优惠金额从商户订单实收金额中扣减. 免开发,免费使用微信支付提供基础防刷.对账.下载消耗记录等基础功能.不需要商户开发,也不收取手续费. 可自定义各项活动规则可自定义活动标题.减价面额.减价门槛.可用商户.预算.用户领取次数

微信支付开发:10分钟帮你开通微信支付微信免充值代金券和微信免充值立减与折扣,申请微信免充值代金券,社交立减金

功能介绍: 商户不需要预先充值营销经费,即可创建和激活免充值代金券活动.活动生效后,用户到店使用微信支付,当订单符合优惠规则时,会直接扣减核销优惠商户的订单实收金额. 免充值,营销资金"0"占用不需要预充值营销经费,即可创建代金券优惠活动.优惠金额从商户订单实收金额中扣减. 免开发,免费使用微信支付提供基础防刷.对账.下载消耗记录等基础功能.不需要商户开发,也不收取手续费. 可自定义各项活动规则可自定义活动标题.减价面额.减价门槛.可用商户.预算.用户领取次数限制,也可以配置指定会员可

微信支付开发:开通微信免充值代金券和开通微信免充值立减与折扣,申请微信免充值代金券,接口升级验收步骤

功能介绍: 商户不需要预先充值营销经费,即可创建和激活免充值代金券活动.活动生效后,用户到店使用微信支付,当订单符合优惠规则时,会直接扣减核销优惠商户的订单实收金额. 免充值,营销资金"0"占用不需要预充值营销经费,即可创建代金券优惠活动.优惠金额从商户订单实收金额中扣减. 免开发,免费使用微信支付提供基础防刷.对账.下载消耗记录等基础功能.不需要商户开发,也不收取手续费. 可自定义活动标题.减价面额.减价门槛.可用商户.预算.用户领取次数限制,也可以配置指定会员可用.指定某些商品享受