微信扫描支付总结

用户扫描商户展示在各种场景的二维码进行支付。

步骤1:商户根据微信支付的规则,为不同商品生成不同的二维码,展示在各种场景,用于用户扫描购买。

步骤2:用户使用微信“扫一扫”扫描二维码后,获取商品支付信息,引导用户完成支付。

1.统一下单

除被扫支付场景以外,商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再按扫码、JSAPI、APP等不同场景生成交易串调起支付。

URL地址:https://api.mch.weixin.qq.com/pay/unifiedorder

官网的参数:

公众账号ID appid

商户号       mch_id

设备号       device_info   PC网页或公众号内支付请传"WEB"

随机字符串 nonce_str

签名          sign

以上五个参数基本是公有的,前三个是固定的。

商品描述    body

商户订单号 out_trade_no

总金额      total_fee

终端IP      spbill_create_ip

通知地址   notify_url

交易类型  trade_type  JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付

以上的所有参数都是必须要用到的。

商品ID    product_id  trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义

这个是根据trade_type来决定是否必传的。

商品描述        detail            商品或支付简要描述

附加数据        attach           在查询API和支付通知中原样返回,该字段主要用于商户携带订单自定义数据

货币类型        fee_type        货币类型,符合ISO 4217标准的三位字母代码默认是CNY,人民币

交易起始时间   time_start     订单生成时间,格式为yyyyMMddHHmmss

交易结束时间   time_expire   格式同上,最短失效时间间隔必须大于5分钟

商品标记        goods_tag      商品标记,代金券或立减优惠功能的参数。

指定支付方式   limit_pay       no_credit 指定不能使用信用卡支付。

用户标识        openid           trade_type=JSAPI ,必传,用户在商户appid下的唯一标识

这些参数都是可以选择性的使用的。

可以根据自己的需求,对于不同的类型封装一下即可。

下面记录一下自己做的,PC网页扫描支付,需要的参数最多大概是以下这些:

①appid,mch_id,device_info,nonce_str(随机字符串,写个函数即可),trade_type这5个参数是固定的

②out_trade_no,product_id,body,total_fee,spbill_create_ip,notify_url这个6个参数是必须有的,在这里要注意这些字段的长度限制

③detail,attach这两个参数可以选填

2.签名函数和随机数函数

private function nonce_str(){
	return strtoupper(md5(mt_rand()));
}

签名函数

private function sign($data){
	$stringA = "";
	// 按照参数名排序
	ksort($data);
	// 非空参数拼接
	foreach ($data as $key => $value) {
		if($value){
			$stringA .= "&" . $key . "=" . $value;
		}
	}
	// 加上商户的key
	$stringA .= "&key=" . $this->mch_key;
	// MD5 加密
	$signValue = md5(substr($stringA, 1));
	// 返回大写
	return strtoupper($signValue);
}

将1中准备的参数,使用2中的算法整理,再添加到参数列表中。下单参数就整理完毕了。

3.将数组转为xml

微信开发中,一般提交的数据格式都是xml格式的,php一般都是先做成数组,在转换。

private function arr2xml($arr){
  if(!is_array($arr)){
	$arr = (array)$arr;
  }
  // 建立xml  $dom = new DOMDocument("1.0");  // 增加根节点
  $item = $dom->createElement("xml"); 	          $dom->appendChild($item);
  

  foreach ($arr as $key=>$val){    // 使用键名建立xml节点
    $itemx = $dom->createElement(is_string($key)?$key:"item");
       $item->appendChild($itemx);
   	// 将值加入节点
       $text = $dom->createTextNode($val);	            $itemx->appendChild($text);
  }  return $dom->saveXML();}

使用curl提交,获取结果即可。

时间: 2024-08-28 07:53:12

微信扫描支付总结的相关文章

微信扫描支付订单数据生成类[模式二]

* *必要条件: *1.微信公共号 *2.微信公共号APPID *3.微信公共号 [微信支付] 绑定的 商户号MCH_ID *4. 微信公共号 商户支付密钥 * * 支付流程: * 1.调用统一下单,取得code_url,生成二维码 * 2.用户扫描二维码,进行支付 * 3.支付完成之后,微信服务器会通知支付成功 * 4.在支付成功通知中需要查单确认是否真正支付成功 业务流程说明: (1)商户后台系统根据用户选购的商品生成订单. (2)用户确认支付后调用微信支付[统一下单API]生成预支付交易:

微信原生支付 Native扫码支付( V3.3.7 版本)

[尊重别人的劳动成果,转载请注明出处:一缕晨光工作室,www.wispdawn.com] 前言 辛苦研究三天,遇到各种困难,最终还是克服了,把我的理解和思路分享给需要帮助的人,如果你觉的好,请帮我分享一下,谢谢. 在没有做之前,我以为和支付宝,以及银联一样,会在官网找到相应的demo,照葫芦画瓢即可,没有什么复杂的,真正去做的时候,发现各种错误,很多时候都莫名其妙找不到北, 在网上搜了不知道多少遍,有V3版的,不过都是js api版本的,没有找到原生扫码支付,下了几个V2版本的微信支付c#dem

.Net后台实现微信APP支付

上一节分享了微信小程序支付的后台,这一节来分享一下微信APP支付的后台.微信APP支付和微信小程序差别不大,微信APP支付后台不需要微信登录凭证.后台下单时交易类型(trade_type)不再是"JSAPI",而是"APP".商户后台传递给支付端的下单参数也有所不同.由于微信小程序支付和APP支付使用的APPID不同,索性直接写了两套支付,不再在代码里区分究竟该使用小程序支付的配置参数还是APP支付的参数. 官方是这样介绍的 具体实现: 新建AppPayConfig

微信h5支付demo微信H5支付demo非微信浏览器支付demo微信wap支付

一.首先先确定H5支付权限已经申请!(需要微信h5支付demo的可以加 851 488 243 备注:h5支付) 二.开发流程 1.用户在商户侧完成下单,使用微信支付进行支付 2.由商户后台向微信支付发起下单请求(调用统一下单接口)注:交易类型trade_type=MWEB 3.统一下单接口返回支付相关参数给商户后台,如支付跳转url(参数名"mweb_url"),商户通过mweb_url调起微信支付中间页 4.中间页进行H5权限的校验,安全性检查(此处常见错误请见下文) 5.如支付成

PHP微信扫描二维码登录网站代码示例

扫描二维码登录对于现在的web应用来说,确实是个很炫酷的功能,安全性也可以保障,不少朋友可能觉得这是个很复杂的工作,其实不然,真正说来只有几个步骤而已. 原理 PC浏览器展示一张二维码图片,该图片二维码值为一段绝对地址的url,大致如下:http://www.example.com/oauth/qrcode?key=key PC浏览器定期轮询 http://www.example.com/oauth/query,可能有的同学会问,怎么不用带上key?这里我们用session来保存key,所以链接

微信APP支付的坑 - errorcode=-1

关于微信App支付errorcode=-1的原因网上的大多数的说明和微信的官方文档差不多,不外乎app签名包名对应问题,这些原因都很好排除. 但最要命的就是下图标3 其他异常! 这是[调起微信支付接口]要传递的参数以及返回结果说明,其中标1和标2很有意思,有意思在哪呢?就是微信在这里告诉你怎么生成对应的数据,但如果真实环境中你就这么用了,那返回结果肯定是-1. 那这两个参数我们要用什么呢? 答案是[调起微信支付]前的上一步[统一下单]中签名用到的随机字符串和时间戳,但可惜的是文档中并没有明确说明

微信app支付 ci框架做的

/**     * 组合微信app支付  获得prepayid     * @param int $order_num     */    private function _wxpay_request($order_num = 0)    {                //判断订单编号必须是数组并且不为0        check_order_num($order_num); //引入微信支付类            libraries_include("wxpay/", &qu

微信扫描二维码登录网站技术原理

微信扫描二维码登录网站 网站应用微信登录开发指南 微信扫描二维码登录网站是微信开放平台下网站应用的一种接口实现的功能.微信开放平台的网址是 https://open.weixin.qq.com 准备工作 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信OAuth2.在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接

微信app支付android客户端以及.net服务端实现

由于公司运营需要,需要在客户端(android/ios)增加微信以及支付宝支付,在调用微信app支付时遇到一些问题,也算是一些踩过的坑,记录下来 ,希望能对.net开发者服务端网站更快的集成微信app支付. 1.开发所需资料:微信开放平台应用的appid以及appsecert,商户平台的商户号以及api安全里面里面设置的key,详见 微信支付账户相关信息; 2.微信开发者平台完善应用平台的相关信息,android应用签名必须用打包签名过的发布版本apk(这一步很重用),包名必须一致,可以用微信提