在微信公众号 银联支付环境下银联云闪支付是否能直接调用实现支付

微信支付如何实现内置浏览器的H5页面支付
作者:荒鱼
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了微信支付如何实现内置浏览器的H5页面支付的相关资料,需要的朋友可以参考下
因为项目需要,要在H5页面中加入微信支付,所以便去尝试,只想说真的很坑,尤其调试起来不方便
这是微信的官方API文档
微信支付的准备工作
申请公众号,申请开通支付,这个很简单,自行百度
申请好之后 在微信公众平台页面的“微信支付”页面中的“开发配置”Tab上配置“支付授权目录”,“测试授权目录”,“测试白名单”
在微信公众平台页面的“开发者中心”中找到“AppID(应用ID)”和“AppSecret(应用密钥)”
在商户平台中找到微信支付分配的商户号,以及自己配置一个商户支付密钥
首先通过微信支付的api 获得支付用的prepay_id,这里需要用到上面提到的“AppID(应用ID)”,“AppSecret(应用密钥)”,“微信支付分配的商户号”,“商户支付密钥”以及其他的一些参数(具体参照微信开发文档)用MD5加密成签名(第一次签名)获得prepay_id后,用prepay_id和一些其他参数(具体参照微信开发文档)用MD5加密成签名(第二次签名)然后在前端通过微信内置浏览器提供的js API,WeixinJSBridge.invoke来调用微信支付的弹出页面,这里需要用到上面的第二次的签名
具体代码如下
$.get('/xxx',function(data){
if(data && data !== ""){
var _data = $.parseJSON(data)[0];
if(parseInt(_data.userAgent) & 5){
alert('您的微信版本低于5.0,无法使用微信支付!');
WeixinJSBridge.invoke('getBrandWCPayRequest',{
'appId': _data.appId,
'timeStamp': _data.timeStamp,
'nonceStr': _data.nonceStr,
'package': 'prepay_id=' + _data.packageOne,
'signType': _data.signType,
'paySign': _data.paySign
},function(res){
if(res.err_msg === 'get_brand_wcpay_request:ok'){
alert('支付成功,返回订单列表!');
}else if(res.err_msg === 'get_brand_wcpay_request:cancel'){
alert('取消支付!');
几个容易失败点需要注意
支付链接和在开发平台配置的链接不匹配
总共需要2次签名,并且所需的参数是不同的,在JS中用到的签名是第二次签名,不要混淆参数传递的不能有错
如果body中有中文需要转义其中还有一些问题没有完全解决,就是位置支付没有一个判断失效的时间,如果在微信支付的弹出层停留时间太久了,可能这个订单在我们网站上已经失效了,可在微信支付中仍然能支付成功,如果有高人知道这个问题怎么解决的,希望能告诉解决办法
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具选择云支付 实现全通道收银解决方案
微信支付开通申请
免费安装--免费提供活动物料--免费活动支持--免费客户引流
战略伙伴:
云思盈科 所有
鲁ICP备号-1
潍坊微信支付安装|微信支付代理|微信支付招商加盟|微信支付服务商|一体支付POS机iOS客户端的微信支付接入
对于一个iOS的APP,如果有一些虚拟的商品或者服务需要通过在线支付来收费的话,一般有几种主流的选择。
如果是通过APP调用支付平台APP的思路的话,一个是调起支付宝客户端,一个则是调起微信支付。
实际上,从代码的角度,调起支付APP就是把一些关键的参数通过一定方式打包成为一个订单,然后发送到支付平台的服务器。所以,只要搞清楚了参数设置,搞清楚了每个支付平台的SDK里面一些关键API的使用,基本上就可以很简单的支持支付。
今天记录一下客户端里面,如何支持微信支付。首先。我们要仔细一下微信SDK的开发文档,了解一下整个支付的大概流程。
然后根据提示,把相应的SDK下载下来,所谓的SDK,也就是一个链接库和两个头文件,很简单。
下载完毕,需要把SDK导入到工程里面,并且配置一下工程。因为开发者文档已经有详细描述,这里就不再复述。
从文档看到,调起微信支付其实最核心的是一下这么一段
PayReq *request = [[[PayReq alloc] init] autorelease];
request.partnerId = @;
request.prepayId= @fc314aa427;
request.package = @Sign=WXP
request.nonceStr= @a462b76eed6e13c64b4fd1c;
request.timeStamp= @;
request.sign= @DD2B03AD8CB16E7A256;
[WXApi sendReq:request];
这里的范例是一段hardcode,真正使用的时候,参数都需要自行传入。
为了搞清楚如何使用API,我们可以下载Sample代码。不过,这个sample代码应该是微信的实习生写的,而且应该是一个对于C++比较熟悉,对于ObjectC比较陌生的实习生。。。代码风格可以看出很多东西哈。。所以这个sample读起来总觉得有点奇怪。当然,写出这个demo也是需要不错的水平,因为这个sample不仅仅是一些API的调用,还包括了一些算法的实现,MD5之类的。
看懂了sample之后,一般可以自己重构一下,成为自己APP里面的一个Manager类。
我是在下载的微信Sampel代码,里面包括有:
payRequestHandler.h
payRequestHandler.m
如果比较看重命名规范的OC程序猿,就会觉得这个payRequestHandler类非常别扭,不符合camel命名规则,而且handler这个词更偏向于c++风格。我就以这个类为原型,重构了一下,并改装成一个传参的方法,供自己的APP调用。APP里面卖商品,一般就是商品名字,价格两个关键参数。所以这个重构的方法也只是提供这两个参数的接口。
ApiXml.h && ApiXml.m && WXUtil.h && WXUtil.m不变
WechatPayManager.h
Created by HuangCharlie on 5/24/15.
#import WXUtil.h
#import ApiXml.h
#import WXApi.h
// 账号帐户资料
// 更改商户把相关参数后可测试
#define APP_ID
@wx@@@@@@@@@@@@@@@@
#define APP_SECRET
//appsecret,看起来好像没用
//商户号,填写商户对应参数
#define MCH_ID
@@@@@@@@@@@
//商户API密钥,填写相应参数
#define PARTNER_ID
//支付结果回调页面
#define NOTIFY_URL
@http://wxpay./pub_v2/pay/notify.v2.php
//获取服务器端支付数据地址(商户自定义)(在小吉这里,签名算法直接放在APP端,故不需要自定义)
#define SP_URL
@http://wxpay./pub_v2/app/app_pay.php
@interface WechatPayManager : NSObject
//预支付网关url地址
@property (nonatomic,strong) NSString* payU
//debug信息
@property (nonatomic,strong) NSMutableString *debugI
@property (nonatomic,assign) NSInteger lastErrC//返回的错误码
//商户关键信息
@property (nonatomic,strong) NSString *appId,*mchId,*spK
//初始化函数
-(id)initWithAppID:(NSString*)appID
mchID:(NSString*)mchID
spKey:(NSString*)
//获取当前的debug信息
-(NSString *) getDebugI
//获取预支付订单信息(核心是一个prepayID)
- (NSMutableDictionary*)getPrepayWithOrderName:(NSString*)name
price:(NSString*)price
device:(NSString*)
WechatPayManager.m
Created by HuangCharlie on 5/24/15.
#import WechatPayManager.h
@implementation WechatPayManager
//初始化函数
-(id)initWithAppID:(NSString*)appID mchID:(NSString*)mchID spKey:(NSString*)key
self = [super init];
//初始化私有参数,主要是一些和商户有关的参数
self.payUrl
= @https://api.mch./pay/
if (self.debugInfo == nil){
self.debugInfo
= [NSMutableString string];
[self.debugInfo setString:@];
self.appId = appID;//微信分配给商户的appID
self.mchId = mchID;//
self.spKey =//商户的密钥
//获取debug信息
-(NSString*) getDebugInfo
NSString *res = [NSString stringWithString:self.debugInfo];
[self.debugInfo setString:@];
//创建package签名
-(NSString*) createMd5Sign:(NSMutableDictionary*)dict
NSMutableString *contentString
=[NSMutableString string];
NSArray *keys = [dict allKeys];
//按字母顺序排序
NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 compare:obj2 options:NSNumericSearch];
//拼接字符串
for (NSString *categoryId in sortedArray) {
![[dict objectForKey:categoryId] isEqualToString:@]
&& ![categoryId isEqualToString:@sign]
&& ![categoryId isEqualToString:@key]
[contentString appendFormat:@%@=%@&, categoryId, [dict objectForKey:categoryId]];
//添加key字段
[contentString appendFormat:@key=%@, self.spKey];
//得到MD5 sign签名
NSString *md5Sign =[WXUtil md5:contentString];
//输出Debug Info
[self.debugInfo appendFormat:@MD5签名字符串:
,contentString];
return md5S
//获取package带参数的签名包
-(NSString *)genPackage:(NSMutableDictionary*)packageParams
NSString *
NSMutableString *reqPars=[NSMutableString string];
//生成签名
= [self createMd5Sign:packageParams];
//生成xml的package
NSArray *keys = [packageParams allKeys];
[reqPars appendString:@
for (NSString *categoryId in keys) {
[reqPars appendFormat:@&%@&%@
, categoryId, [packageParams objectForKey:categoryId],categoryId];
[reqPars appendFormat:@%@
return [NSString stringWithString:reqPars];
//提交预支付
-(NSString *)sendPrepay:(NSMutableDictionary *)prePayParams
NSString *prepayid =
//获取提交支付
NSString *send
= [self genPackage:prePayParams];
//输出Debug Info
[self.debugInfo appendFormat:@API链接:%@
, self.payUrl];
[self.debugInfo appendFormat:@发送的xml:%@
//发送请求post xml数据
NSData *res = [WXUtil httpSend:self.payUrl method:@POST data:send];
//输出Debug Info
[self.debugInfo appendFormat:@服务器返回:
,[[NSString alloc] initWithData:res encoding:NSUTF8StringEncoding]];
XMLHelper *xml
= [[XMLHelper alloc] autorelease];
//开始解析
[xml startParse:res];
NSMutableDictionary *resParams = [xml getDict];
//判断返回
NSString *return_code
= [resParams objectForKey:@return_code];
NSString *result_code
= [resParams objectForKey:@result_code];
if ( [return_code isEqualToString:@SUCCESS] )
//生成返回数据的签名
NSString *sign
= [self createMd5Sign:resParams ];
NSString *send_sign =[resParams objectForKey:@sign] ;
//验证签名正确性
if( [sign isEqualToString:send_sign]){
if( [result_code isEqualToString:@SUCCESS]) {
//验证业务处理状态
= [resParams objectForKey:@prepay_id];
return_code = 0;
[self.debugInfo appendFormat:@获取预支付交易标示成功!
self.lastErrCode = 1;
[self.debugInfo appendFormat:@gen_sign=%@
,sign,send_sign];
[self.debugInfo appendFormat:@服务器返回签名验证错误!!!
self.lastErrCode = 2;
[self.debugInfo appendFormat:@接口返回错误!!!
- (NSMutableDictionary*)getPrepayWithOrderName:(NSString*)name
price:(NSString*)price
device:(NSString*)device
//订单标题,展示给用户
NSString* orderName =
//订单金额,单位(分)
NSString* orderPrice =//以分为单位的整数
//支付设备号或门店号
NSString* orderDevice =
//支付类型,固定为APP
NSString* orderType = @APP;
//发器支付的机器ip,暂时没有发现其作用
NSString* orderIP = @196.168.1.1;
//随机数串
srand( (unsigned)time(0) );
NSString *noncestr
= [NSString stringWithFormat:@%d, rand()];
NSString *orderNO
= [NSString stringWithFormat:@%ld,time(0)];
//================================
//预付单参数订单设置
//================================
NSMutableDictionary *packageParams = [NSMutableDictionary dictionary];
[packageParams setObject: self.appId
forKey:@appid];
//开放平台appid
[packageParams setObject: self.mchId
forKey:@mch_id];
[packageParams setObject: orderDevice
forKey:@device_info]; //支付设备号或门店号
[packageParams setObject: noncestr
forKey:@nonce_str];
[packageParams setObject: orderType
forKey:@trade_type];
//支付类型,固定为APP
[packageParams setObject: orderName
forKey:@body];
//订单描述,展示给用户
[packageParams setObject: NOTIFY_URL
forKey:@notify_url];
//支付结果异步通知
[packageParams setObject: orderNO
forKey:@out_trade_no];//商户订单号
[packageParams setObject: orderIP
forKey:@spbill_create_ip];//发器支付的机器ip
[packageParams setObject: orderPrice
forKey:@total_fee];
//订单金额,单位为分
//获取prepayId(预支付交易会话标识)
NSString *preP
prePayid = [self sendPrepay:packageParams];
if(prePayid == nil)
[self.debugInfo appendFormat:@获取prepayid失败!
//获取到prepayid后进行第二次签名
*package, *time_stamp, *nonce_
//设置支付参数
time(&now);
time_stamp
= [NSString stringWithFormat:@%ld, now];
nonce_str = [WXUtil md5:time_stamp];
//重新按提交格式组包,微信客户端暂只支持package=Sign=WXPay格式,须考虑升级后支持携带package具体参数的情况
= [NSString stringWithFormat:@Sign=%@,package];
= @Sign=WXP
//第二次签名参数列表
NSMutableDictionary *signParams = [NSMutableDictionary dictionary];
[signParams setObject: self.appId
forKey:@appid];
[signParams setObject: self.mchId
forKey:@partnerid];
[signParams setObject: nonce_str
forKey:@noncestr];
[signParams setObject: package
forKey:@package];
[signParams setObject: time_stamp
forKey:@timestamp];
[signParams setObject: prePayid
forKey:@prepayid];
//生成签名
NSString *sign
= [self createMd5Sign:signParams];
//添加签名
[signParams setObject: sign
forKey:@sign];
[self.debugInfo appendFormat:@第二步签名成功,sign=%@
//返回参数列表
return signP
然后,在需要调用微信支付的Controller里面,新建一个方法。在合适的地方调用。这个方法里面利用WechatPayManager这个类进行了初始化和参数封装,然后把上述的核心代码(PayReq那一段)
- (void)wxPayWithOrderName:(NSString*)name price:(NSString*)price
//创建支付签名对象 && 初始化支付签名对象
WechatPayManager* wxpayManager = [[[WechatPayManager alloc]initWithAppID:APP_ID mchID:MCH_ID spKey:PARTNER_ID] autorelease];
//获取到实际调起微信支付的参数后,在app端调起支付
//生成预支付订单,实际上就是把关键参数进行第一次。
NSString* device = [[UserManager defaultManager]userId];
NSMutableDictionary *dict = [wxpayManager getPrepayWithOrderName:name
price:price
device:device];
if(dict == nil){
//错误提示
NSString *debug = [wxpayManager getDebugInfo];
NSMutableString *stamp
= [dict objectForKey:@timestamp];
//调起微信支付
PayReq* req
= [[[PayReq alloc] init]autorelease];
req.openID
= [dict objectForKey:@appid];
req.partnerId
= [dict objectForKey:@partnerid];
req.prepayId
= [dict objectForKey:@prepayid];
req.nonceStr
= [dict objectForKey:@noncestr];
req.timeStamp
= stamp.intV
req.package
= [dict objectForKey:@package];
= [dict objectForKey:@sign];
BOOL flag = [WXApi sendReq:req];
BOOL flag = [WXApi safeSendReq:req];
再者,支付完成了需要调用一个delegate,这个delegate方便个性化显示支付结果。一般直接把这两个delegate放在AppDelegate就好了。因为有一些其他内容也是需要在AppDelegate里面实现,省的分开找不到。
-(void) onResp:(BaseResp*)resp
//启动微信支付的response
NSString *strMsg = [NSString stringWithFormat:@errcode:%d, resp.errCode];
if([resp isKindOfClass:[PayResp class]]){
//支付返回结果,实际支付结果需要去微信服务器端查询
switch (resp.errCode) {
strMsg = @支付结果:成功!;
strMsg = @支付结果:失败!;
strMsg = @用户已经退出支付!;
strMsg = [NSString stringWithFormat:@支付结果:失败!retcode = %d, retstr = %@, resp.errCode,resp.errStr];
注意事项:
1)如果APP里面已经使用了ShareSDK,就有一些地方要注意。不要再重复导入微信的SDK,因为shareSDK里面的extend已经包括了微信的SDK。
2)微信本身是鼓励客户APP把签名算法放到服务器上面,这样信息就不容易被。但是如果客户APP本身没有服务器端,或者认为不需要放到服务器端,也可以直接把签名(加密)的部分直接放在APP端。Sample代码的注释有点乱,多次提到服务器云云,但是其实可以不这么做。
3)微信的price单位是分。注意下即可。
4)暂时想不到,以后想到了再记录。。微信支付H5调用支付详解(java版)
作者:夜-feng
字体:[ ] 类型:转载 时间:
本篇文章主要介绍了微信支付H5调用支付详解,小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧。
最近项目需要微信支付,然后看了下微信公众号支付,,虽然不难,但是细节还是需要注意的,用了大半天时间写了个demo,并且完整的测试了一下支付流程,下面分享一下微信公众号支付的经验。
一、配置公众号微信支付&
需要我们配置微信公众号支付地址和测试白名单。
比如:支付JS页面的地址为 /shop/pay/
那此处配置/shop/pay/
二、开发流程
借用微信公众号支付api(地址 ),我们需要开发的为红色标记出的。如下:
三、向微信服务器端下订单
调用统一下单接口,这样就能获取微信支付的prepay_id()。
在调用该接口前有几个字段是H5支付必须填写的openid
3.1 获取openid
可以通过网页授权形式()
在微信中发送如下链接
=要跳转的下订单的url&response_type=code&scope=snsapi_base&state=123#wechat_redirect
3.2 下订单获取prepay_id
代码如下,实际上是通过post发送一个xml 文件,获取微信服务器端发送过来的prepay_id。
import java.io.ByteArrayInputS
import javaioIOE
import javaioInputS
import javaioUnsupportedEncodingE
import javautilD
import javautilHashM
import javautilI
import javautilM
import javautilMapE
import javautilR
import javaxservlethttpHttpServletR
import javaxservlethttpHttpServletR
import orgapachecommonscodecdigestDigestU
import orgspringframeworkstereotypeC
import orgspringframeworkwebbindannotationRequestM
import orgxmlpullvXmlPullP
import orgxmlpullvXmlPullParserE
import orgxmlpullvXmlPullParserF
import comfasterxmljacksondatabindJsonN
import comgsonoauthO
import comgsonoauthP
import comgsonutilHttpK
import comsyutilDatetimeU
import comsyutilJsonU
@Controller
@RequestMapping("/pay")
public class WXPayController {
@RequestMapping(value = "wxprepaydo")
public void jspay(HttpServletRequest request, HttpServletResponse response, String callback) throws Exception {
// 获取openid
String openId = SessionUtilgetAtt(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&();
paraMapput("appid", appid);
paraMapput("attach", "测试");
paraMapput("body", "测试购买支付");
paraMapput("mch_id", "");
paraMapput("nonce_str", create_nonce_str());
paraMapput("openid", openId);
paraMapput("out_trade_no", out_trade_no);
paraMapput("spbill_create_ip", getAddrIp(request));
paraMapput("total_fee", "1");
paraMapput("trade_type", "JSAPI");
paraMapput("notify_url", "http://wwwxxxco/bank/page/wxnotify");
String sign = getSign(paraMap, paternerKey);
paraMapput("sign", sign);
// 统一下单 https://apimchweixinqqcom/pay/unifiedorder
String url = "https://apimchweixinqqcom/pay/unifiedorder";
String xml = ArrayToXml(paraMap);
String xmlStr = HttpKitpost(url, xml);
// 预付商品id
String prepay_id = "";
if (xmlStrindexOf("SUCCESS") != -1) {
Map&String, String& map = doXMLParse(xmlStr);
prepay_id = (String) mapget("prepay_id");
Map&String, String& payMap = new HashMap&String, String&();
payMapput("appId", appid);
payMapput("timeStamp", create_timestamp());
payMapput("nonceStr", create_nonce_str());
payMapput("signType", "MD5");
payMapput("package", "prepay_id=" + prepay_id);
String paySign = getSign(payMap, paternerKey);
payMapput("pg", prepay_id);
payMapput("paySign", paySign);
WebUtilresponse(response, WebUtilpackJsonp(callback, JsonUtilwarpJsonNodeResponse(JsonUtilobjectToJsonNode(payMap))toString()));
* map转成xml
* @param arr
public String ArrayToXml(Map&String, String& arr) {
String xml = "&xml&";
Iterator&Entry&String, String&& iter = arrentrySet()iterator();
while (iterhasNext()) {
Entry&String, String& entry = iternext();
String key = entrygetKey();
String val = entrygetValue();
xml += "&" + key + "&" + val + "&/" + key + "&";
xml += "&/xml&";
// 获取openId
private String getUserOpenId(HttpServletRequest request) throws Exception {
String code = requestgetParameter("code");
if (code == null) {
String openId = requestgetParameter("openId");
return openId;
Oauth o = new Oauth();
String token = ogetToken(code);
JsonNode node = JsonUtilStringToJsonNode(token);
String openId = nodeget("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 += charscharAt(rdnextInt(charslength() - 1));
private String getAddrIp(HttpServletRequest request){
return requestgetRemoteAddr();
private String create_timestamp() {
return LongtoString(SystemcurrentTimeMillis() / 1000);
private String getTradeNo(){
String timestamp = DatetimeUtilformatDate(new Date(), DatetimeUtilDATETIME_PATTERN);
return "HZNO" +
private String getSign(Map&String, String& params, String paternerKey )
throws UnsupportedEncodingException {
String string1 = PaycreateSign(params, false);
String stringSignTemp = string1 + "&key=" + paternerK
String signValue = DigestUtilsmd5Hex(stringSignTemp)toUpperCase();
return signV
private Map&String, String& doXMLParse(String xml)
throws XmlPullParserException, IOException {
InputStream inputStream = new ByteArrayInputStream(xmlgetBytes());
Map&String, String& map =
XmlPullParser pullParser = XmlPullParserFactorynewInstance()
newPullParser();
pullParsersetInput(inputStream, "UTF-8"); // 为xml设置要解析的xml数据
int eventType = pullParsergetEventType();
while (eventType != XmlPullParserEND_DOCUMENT) {
switch (eventType) {
case XmlPullParserSTART_DOCUMENT:
map = new HashMap&String, String&();
case XmlPullParserSTART_TAG:
String key = pullParsergetName();
if (keyequals("xml"))
String value = pullParsernextText();
mapput(key, value);
case XmlPullParserEND_TAG:
eventType = pullParsernext();
四、H5支付
H5支付其实很简单,只需要调用微信内嵌浏览器的js方法就行()
&%@ page language="java" contentType="text/ charset=UTF-8" pageEncoding="UTF-8"%&
&%@ taglib prefix="spring" uri="http://wwwspringframeworkorg/tags" %&
String path = requestgetContextPath();
String basePath = requestgetScheme() + "://" + requestgetServerName() + ":" + requestgetServerPort() + path + "/";
&!DOCTYPE html PUBLIC "-//W3C//DTD HTML 01 Transitional//EN" "http://wwwworg/TR/html4/loosedtd"&
&meta charset="utf-8" /&
&meta name="viewport" content="width=device-width, initial-scale=0, maximum-scale=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/csscss?v=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/zeptominjs"&&/script&
&script type="text/javascript" src="/js/commonjs"&&/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(){
WeixinJSBridgeinvoke(
'getBrandWCPayRequest', {
"appId" : appId,
//公众号名称,由商户传入
"timeStamp": timeStamp,
//时间戳,自1970年以来的秒数
"nonceStr" : nonceStr, //随机串
"package" : "prepay_id=" + pg,
"signType" : signType,
//微信签名方式:
"paySign" : paySign
//微信签名
function(res){
if(reserr_msg == "get_brand_wcpay_request:ok" ) {
alert("支付成功");
// 使用以上方式判断前端返回,微信团队郑重提示:reserr_msg将在用户支付成功后返回
ok,但并不保证它绝对可靠。
function pay(){
if (typeof WeixinJSBridge == "undefined"){
if( documentaddEventListener ){
documentaddEventListener('WeixinJSBridgeReady', onBridgeReady, false);
}else if (documentattachEvent){
documentattachEvent('WeixinJSBridgeReady', onBridgeReady);
documentattachEvent('onWeixinJSBridgeReady', onBridgeReady);
onBridgeReady();
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 银联 微信 支付宝 的文章

更多推荐

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

点击添加站长微信