微信公众号支付开发者怎么开发

面对20位女生的贴心祝福,围观男生无比羡慕嫉妒恨。
女司机:粉丝会说你还是很厉害。我觉得会很掉粉。
声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
  微信支付功能推出已经有一段时间了,可谓真是让不少商户实实在在的享受到了便利,同时也为自己增加了销售业绩。
  微信公众平台商户怎样开通微信支付功能呢?
  第一步:微信支付申请条件
  首先商家们在申请微信支付接口时,我们先来看看到底什么样的条件才能申请。
  一般能开通微信支付的主体为企业、政府、组织机构、社团、媒体等。个体户资质不全怎么开通微信支付呢?下文会详细讲解。
  第二步:申请微信支付所需资料
  1.微信支付负责人姓名、联系电话、邮箱
  2.企业执照、银行账户、运营人身份证照片
  3.商家名称(对外展示的名字,一般可用微信名)
  4.所提供的商品或服务的简单介绍。
  第三步:企业开通微信支付流程
  将以上资料准备好后,联系微信公众平台第三方服务机构优度网,其在线工作人员可快速完成微信认证、微信支付的开通,所需时间只要六工作日左右。个体户在资质不全、没有对公银行账户的情况下,也可以联系优度网在线工作人员,说明情况进而帮忙开通好微信认证及微信支付功能。
  微信支付开通地址:
  第四步:微信支付应用场景
  微信支付可用于各种支付场景,如酒店订房、餐厅点餐、商场超市埋单、停车场付费、手机充值等等。
  1.扫码支付
  用户扫描二维码(线下或PC端的均可),即可生成微信支付交易页面,完成交易流程。
  2.公众号支付
  用户在微信中关注商户的微信公众号,在商户的微信公众号内完成商品和服务的支付购买。如QQ充值、广东联通、印美图、麦当劳、微团购、香港航空、微信电影票等公众号均支持该方式。
  3.APP支付
  开发了APP应用的企业,可以将微信支付接入到程序里。如停车场收费APP,车主扫码即可完成计时、付费。
  第五步:微信支付拓展
  企业在开通微信支付接口后,用户只需用手机扫一扫二维码便可立即支付,整个过程非常简便流畅。商户可以把商品做成二维码,张贴在车站、广告牌、海报、名片等处。也可通过微信小店、自定义菜单、关键字回复等方式向订阅用户推送商品消息,用户可在微信公众号中完成选购支付的流程。
欢迎举报抄袭、转载、暴力色情及含有欺诈和虚假信息的不良文章。
请先登录再操作
请先登录再操作
微信扫一扫分享至朋友圈
搜狐公众平台官方账号
生活时尚&搭配博主 /生活时尚自媒体 /时尚类书籍作者
搜狐网教育频道官方账号
全球最大华文占星网站-专业研究星座命理及测算服务机构
方石传媒是赣南最大的地方新媒体平台。
主演:黄晓明/陈乔恩/乔任梁/谢君豪/吕佳容/戚迹
主演:陈晓/陈妍希/张馨予/杨明娜/毛晓彤/孙耀琦
主演:陈键锋/李依晓/张迪/郑亦桐/张明明/何彦霓
主演:尚格?云顿/乔?弗拉尼甘/Bianca Bree
主演:艾斯?库珀/ 查宁?塔图姆/ 乔纳?希尔
baby14岁写真曝光
李冰冰向成龙撒娇争宠
李湘遭闺蜜曝光旧爱
美女模特教老板走秀
曝搬砖男神奇葩择偶观
柳岩被迫成赚钱工具
大屁小P虐心恋
匆匆那年大结局
乔杉遭粉丝骚扰
男闺蜜的尴尬初夜
客服热线:86-10-
客服邮箱:自由、创新、研究、探索
Linux/Windows Mono/DotNet [ Open Source .NET Development/ 使用开源工具进行DotNet软件开发]锐意进取,志存高远.成就梦想,只争朝夕.从你开始,创新世界.【That I exist is a perpetual supprise which is life. Focus on eCommerce】
博客使用Word发博,发布后,排版会出现很多问题,敬请谅解。可加群获取原始文档。
本篇主要讲解微信支付的开发流程,相关业务基于MAGICODES.WECHAT.SDK实现。通过本篇教程,您可以很方便的快速完成微信公众号支付的开发。
关于Magicodes.WeChat.SDK
MAGICODES.WECHAT.SDK为心莱团队封装的轻量级微信SDK,现已全部开源,开源库地址为:
更多介绍,请关注后续博客。
官方博客:
相关开源库地址:
微信公众号支付
用户已有商城网址,用户通过微信消息、微信扫描二维码、微信自定义菜单等操作在微信内打开网页时,可以调用微信支付完成下单购买流程。
微信的支付流程图太复杂,这里我画了一个相对简单的:
开发流程图
配置微信支付授权目录
首先,需要登录公众号后台,然后进入【微信支付】页面
设置【开发配置】
发起支付的页面目录必须与设置的精确匹配。并将支付链接发到对应的公众号会话窗口中才能正常发起支付测试。注意正式目录一定不能与测试目录设置成一样,否则支付会出错。
注意:如果是使用测试目录的地址,一定要记得把个人测试微信号添加到白名单。另外,请注意红框内说明,否则很容易掉坑里。
配置OAUTH域名以及JSSDK
使用微信支付,需要通过OAUTH获取用户的OPENID,因为要调用JS API,那么JSSDK授权也是需要的。
相关配置界面如下:
引用Magicodes.WeChat.SDK并且注册相关配置
Magicdoes.WeChat.SDK可以通过Nuget包来引用,引用之后,需要先做一些初始化设置。
初始化SDK配置
这里初始化了SDK配置,并且注册了相关函数。比如获取支付配置函数,这里可以编写自己的获取支付配置的逻辑。
如果是使用Magicodes.WeiChat或者是Magicodes.Shop,那么可以在相关设置界面设置微信支付相关参数,如下所示:
设置微信配置
打开Magicodes.WeiChat设置界面,配置微信支付相关参数。支付配置模型如下所示:
public&interface&IWeChatPayConfig
///&&summary&
///&证书相对路径
///&&/summary&
string&PayCertPath {&& }
///&&summary&
///&证书密钥(与微信商户平台商户MchID一致)
///&&/summary&
string&CertPassword {&& }
///&&summary&
///&支付密钥
///&&/summary&
string&TenPayKey {&& }
///&&summary&
///&商户Mch_ID
///&&/summary&
string&MchId {&& }
///&&summary&
///&支付完成后的回调处理页面
///&&/summary&
string&Notify {&& }
添加支付页,设置支付参数
在开始支付之前,我们需要创建一个支付页。并且生成支付相关参数,如下面代码所示:
关于OPENID的获取,Magicodes.WeiChat可以通过在Action上添加[WeChatOAuth]来获取粉丝信息,包括OPENID。
调用JS Api进行支付
微信页面,我们需要编写业务逻辑并调用JS API进行支付,相关JS代码如下所示:
注意:调用JS api需要JSSDK权限。Magicodes.WeiChat用户只需使用"ViewBag.UseJSSDK=true"即可启用并注册JSSDK权限。
然后,我们只需要绑定JS按钮事件即可,如:
$('#btnPay').on('click',function(){
callpay();
接收微信服务器事件通知,处理支付业务
微信支付完毕后,微信服务器会异步通知我们的Web服务器,通知地址我们在上面的支付配置中已经配置过了。
使用Magicodes.WeChat.SDK的话,处理起来比较简单,相关关键代码如下所示:
在支付成功的函数中,我们可以编写成功逻辑,比如订单状态的变更,支付日志的记录等等。
至此,整个微信公众号开发均已完成。
作者:出处:
阅读(...) 评论()
随笔 - 15244
评论 - 1112微信公众号支付—扫码输入金额支付的开发_博客_coding云
微信公众号支付—扫码输入金额支付的开发
1278次阅读 |
今天来给大家介绍下如何实现扫码输入金额的微信支付。
非程序员:
我们先看看扫码输入金额支付的整体流程:
1.首先扫下支付的二维码
2.扫完二维码打开支付页面,输入0.01元试试
3.点击确认支付后,打开输入密码页面
4.密码验证成功后,返回支付成功页面
5.点击完成后,返回成功提示页面(这里可以直接返回到主页面)
以上就是扫码输入金额的微信支付的完整过程,当然也会有后台,能够在后台看到具体的支付订单数据。
-----------------------------------------------------------------------------------------------------------------------------------
程序员 & :开发部分请移步:
非程序员:
(转载本站原创文章请注明作者与出处)
这篇文章帮我解决问题了,我忍不住的想点赞!!!
同时也想小小的打赏一笔表示感谢。
已经有6位老爷赞赏了本文
打赏方式一:
打开支付宝,使用“扫一扫”打赏。
打赏方式二:
打开微信,使用“扫一扫”打赏。今天看啥 热点:
微信公众号支付H5调用支付详解,h5详解
最近项目需要微信支付,然后看了下微信公众号支付,,虽然不难,但是细节还是需要注意的,用了大半天时间写了个demo,并且完整的测试了一下支付流程,下面分享一下微信公众号支付的经验。
一、配置公众号微信支付&&
& &需要我们配置微信公众号支付地址和测试白名单。
& & &比如:支付JS页面的地址为 /shop/pay/
& & & & & & 那此处配置/shop/pay/
& 二、开发流程
& & &借用微信公众号支付api(地址 http://pay./wiki/doc/api/index.php?chapter=7_4),我们需要开发的为红色标记出的。如下:
三、向微信服务器端下订单
& & & & & & &调用统一下单接口,这样就能获取微信支付的prepay_id(http://pay./wiki/doc/api/index.php?chapter=9_1)。
& & &在调用该接口前有几个字段是H5支付必须填写的openid
& & 3.1 获取openid
& & & & &可以通过网页授权形式(http://mp./wiki/17/c0f37d13d5d2c37b468d75.html)
& & & &在微信中发送如下链接
https://open./connect/oauth2/authorize?appid=wx520c15f&redirect_uri=要跳转的下订单的url&response_type=code&scope=snsapi_base&state=123#wechat_redirect
& &3.2 下订单获取prepay_id
& & 代码如下,实际上是通过post发送一个xml 文件,获取微信服务器端发送过来的prepay_id。
import java.io.ByteArrayInputS
import java.io.IOE
import java.io.InputS
import java.io.UnsupportedEncodingE
import java.util.D
import java.util.HashM
import java.util.I
import java.util.M
import java.util.Map.E
import java.util.R
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import mons.codec.digest.DigestU
import org.springframework.stereotype.C
import org.springframework.web.bind.annotation.RequestM
import org.xmlpull.v1.XmlPullP
import org.xmlpull.v1.XmlPullParserE
import org.xmlpull.v1.XmlPullParserF
import com.fasterxml.jackson.databind.JsonN
import com.gson.oauth.O
import com.gson.oauth.P
import com.gson.util.HttpK
import com.sy.util.DatetimeU
import com.sy.util.JsonU
@Controller
@RequestMapping(&/pay&)
public class WXPayController {
@RequestMapping(value = &wxprepay.do&)
public void jspay(HttpServletRequest request, HttpServletResponse response, String callback) throws Exception {
// 获取openid
String openId = SessionUtil.getAtt(request, &openId&);
if (openId == null) {
openId = getUserOpenId(request);
String appid = &wx16691fcb&;
String paternerKey = &ININGFENG1234567fdfwfdfd1ss234567&;
String out_trade_no = getTradeNo();
Map&String, String& paraMap = new HashMap&String, String&();
paraMap.put(&appid&, appid);
paraMap.put(&attach&, &测试&);
paraMap.put(&body&, &测试购买支付&);
paraMap.put(&mch_id&, &&);
paraMap.put(&nonce_str&, create_nonce_str());
paraMap.put(&openid&, openId);
paraMap.put(&out_trade_no&, out_trade_no);
paraMap.put(&spbill_create_ip&, getAddrIp(request));
paraMap.put(&total_fee&, &1&);
paraMap.put(&trade_type&, &JSAPI&);
paraMap.put(&notify_url&, &http://www.xxx.co/bank/page/wxnotify&);
String sign = getSign(paraMap, paternerKey);
paraMap.put(&sign&, sign);
// 统一下单 https://api.mch./pay/unifiedorder
String url = &https://api.mch./pay/unifiedorder&;
String xml = ArrayToXml(paraMap);
String xmlStr = HttpKit.post(url, xml);
// 预付商品id
String prepay_id = &&;
if (xmlStr.indexOf(&SUCCESS&) != -1) {
Map&String, String& map = doXMLParse(xmlStr);
prepay_id = (String) map.get(&prepay_id&);
Map&String, String& payMap = new HashMap&String, String&();
payMap.put(&appId&, appid);
payMap.put(&timeStamp&, create_timestamp());
payMap.put(&nonceStr&, create_nonce_str());
payMap.put(&signType&, &MD5&);
payMap.put(&package&, &prepay_id=& + prepay_id);
String paySign = getSign(payMap, paternerKey);
payMap.put(&pg&, prepay_id);
payMap.put(&paySign&, paySign);
WebUtil.response(response, WebUtil.packJsonp(callback, JsonUtil.warpJsonNodeResponse(JsonUtil.objectToJsonNode(payMap)).toString()));
* map转成xml
* @param arr
public String ArrayToXml(Map&String, String& arr) {
String xml = &&xml&&;
Iterator&Entry&String, String&& iter = arr.entrySet().iterator();
while (iter.hasNext()) {
Entry&String, String& entry = iter.next();
String key = entry.getKey();
String val = entry.getValue();
xml += &&& + key + &&& + val + &&/& + key + &&&;
xml += &&/xml&&;
// 获取openId
private String getUserOpenId(HttpServletRequest request) throws Exception {
String code = request.getParameter(&code&);
if (code == null) {
String openId = request.getParameter(&openId&);
return openId;
Oauth o = new Oauth();
String token = o.getToken(code);
JsonNode node = JsonUtil.StringToJsonNode(token);
String openId = node.get(&openid&).asText();
return openId;
private String create_nonce_str() {
String chars = &abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&;
String res = &&;
for (int i = 0; i & 16; i++) {
Random rd = new Random();
res += chars.charAt(rd.nextInt(chars.length() - 1));
private String getAddrIp(HttpServletRequest request){
return request.getRemoteAddr();
private String create_timestamp() {
return Long.toString(System.currentTimeMillis() / 1000);
private String getTradeNo(){
String timestamp = DatetimeUtil.formatDate(new Date(), DatetimeUtil.DATETIME_PATTERN);
return &HZNO& +
private String getSign(Map&String, String& params, String paternerKey )
throws UnsupportedEncodingException {
String string1 = Pay.createSign(params, false);
String stringSignTemp = string1 + &&key=& + paternerK
String signValue = DigestUtils.md5Hex(stringSignTemp).toUpperCase();
private Map&String, String& doXMLParse(String xml)
throws XmlPullParserException, IOException {
InputStream inputStream = new ByteArrayInputStream(xml.getBytes());
Map&String, String& map =
XmlPullParser pullParser = XmlPullParserFactory.newInstance()
.newPullParser();
pullParser.setInput(inputStream, &UTF-8&); // 为xml设置要解析的xml数据
int eventType = pullParser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
map = new HashMap&String, String&();
case XmlPullParser.START_TAG:
String key = pullParser.getName();
if (key.equals(&xml&))
String value = pullParser.nextText();
map.put(key, value);
case XmlPullParser.END_TAG:
eventType = pullParser.next();
四、H5支付
& & & H5支付其实很简单,只需要调用微信内嵌浏览器的js方法就行(http://pay./wiki/doc/api/index.php?chapter=7_7)
&%@ page language=&java& contentType=&text/ charset=UTF-8& pageEncoding=&UTF-8&%&
&%@ taglib prefix=&spring& uri=&http://www.springframework.org/tags& %&
String path = request.getContextPath();
String basePath = request.getScheme() + &://& + request.getServerName() + &:& + request.getServerPort() + path + &/&;
&!DOCTYPE html PUBLIC &-//W3C//DTD HTML 4.01 Transitional//EN& &http://www.w3.org/TR/html4/loose.dtd&&
&meta charset=&utf-8& /&
&meta name=&viewport& content=&width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0& /&
&meta name=&apple-mobile-web-app-capable& content=&yes& /&
&meta name=&apple-mobile-web-app-status-bar-style& content=&black& /&
&meta name=&format-detection& content=&telephone=no& /&
&title&测试支付&/title&
&link href=&../css/css.css?v=1.0& rel=&stylesheet& type=&text/css&&
&div class=&index_box&&
&div class=&apply_name&&微信js支付测试&/div&
&div class=&branch_con&&
&li&&span class=&name&&测试支付信息&/span&&/li&
&p class=&cz_btn&&&a href=&javascript:pay();& class=&btn_1&&立即支付&/a&&/p&
&script type=&text/javascript& src=&../js/zepto.min.js&&&/script&
&script type=&text/javascript& src=&../js/common.js&&&/script&
&script type=&text/javascript&&
var appId = urlparameter(&appId&);
var timeStamp = urlparameter(&timeStamp&);
var nonceStr = urlparameter(&nonceStr&);
var pg = urlparameter(&pg&);
var signType = urlparameter(&signType&);
var paySign = urlparameter(&paySign&);
function onBridgeReady(){
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
&appId& : appId,
//公众号名称,由商户传入
&timeStamp&: timeStamp,
//时间戳,自1970年以来的秒数
&nonceStr& : nonceStr, //随机串
&package& : &prepay_id=& + pg,
&signType& : signType,
//微信签名方式:
&paySign& : paySign
//微信签名
function(res){
if(res.err_msg == &get_brand_wcpay_request:ok& ) {
alert(&支付成功&);
// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回
ok,但并不保证它绝对可靠。
function pay(){
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();
相关搜索:
相关阅读:
相关频道:
Android教程最近更新

我要回帖

更多关于 微信公众支付开发文档 的文章

 

随机推荐