微信支付开发者文档介接入

好了,多余的话不过多解释,下面咋们大家一起来看看微信的SDK接入文档
可能介入的不是太好,重在学习,学习哈,跟着我的思路来,一定要有耐心,微信坑很多,先看下参数(重要)

如果哥们急的话请点击:https://www.jianshu.com/p/1015841aae48(直接下载Demo填写正确信息直接调起支付)

更新第二版Demo:https://www.jianshu.com/p/1015841aae48

排版1:http://www.jianshu.com/p/4ea5cb20abe7

Demo:链接:链接: https://pan.baidu.com/s/1eS1tyWM 密码: 3xih

WRNING!!!!
在类:WX_DATA_XINHAO_HAN设置微信信息
在类AliPay_XINHAO_HAN_DATA设置支付宝信息

给一个获取IP的地址: http://pv.sohu.com/cityjson?ie=utf-8
测试微信数据接口 : https://pay.weixin.qq.com/wiki/tools/signverify/
微信参数
appid: 你的APPID
mch_id : 商户号
nonce_str : 生成的随机字符串
body : 商品详情
out_trade_no : 时间
total_fee : 金额
spbill_create_ip : IP地址
notify_url : 回调成功后调用的地址
trade_type : 支持类型(写死 "APP")
步骤1:你先去注册微信官网的一些信息然后获取以下这3个东西
1.APPID 2.你的商户号 3.秘钥
就这几个东西

信息

基础信息 nonce_str : 生成的随机字符串
随机字符串生成:
一般都是固定的,自己也懒得写所以找了一个,如果要自己写的话给你提供一些思路
首先把 A-Z 0-9 写到一个String数组中,然后通过Random取索引 for 32次即可
我们看下网上的吧


MD5

MD5方法
代码复制
排版真难受,这玩意连个代码引用都没有??????

这个使用方法是这样的

信息

代码复制

//生成随机字符串
public staticStringgenNonceStr() {
Random random =newRandom();
returnMD5.getMessageDigest(String.valueOf(random.nextInt(10000)).getBytes());
}

public final staticStringgetMessageDigest(byte[] buffer) {
charhexDigits[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
try{
MessageDigest mdTemp = MessageDigest.getInstance("MD5");
mdTemp.update(buffer);
byte[] md = mdTemp.digest();
intj = md.length;
charstr[] =new char[j *2];
intk =0;
for(inti =0;i < j;i++) {
bytebyte0 = md[i];
str[k++] = hexDigits[byte0 >>>4&0xf];
str[k++] = hexDigits[byte0 &0xf];
}
return newString(str);
}catch(Exception e) {
return null;
}
}

基础信息 out_trade_no : 时间
这个应该都会把,就是使用JAVA获取你自己当前的时间格式为
比如:2017年7月17日就写成2017717
基础信息 spbill_create_ip : IP地址

使用网路访问:http://pv.sohu.com/cityjson?ie=utf-8
会给你返回 var returnCitySN = {"cip": "219.144.202.177", "cid": "610100", "cname": "陕西省西安市"};
你自己截取一下就OK了
基础信息 notify_url : 回调成功后调用的地址

后台暂时没有提供接口的话就随便写

基础信息 mch_id : 商户号
你的商户号
基础信息 body : 商品详情
随意写
基础信息 total_fee : 金额
随意写
好了基本的功能数据都介绍完了
导入微信的Sdk
Android Studio适用


compile'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

把刚才的几个参数生成一下sign

[图片上传中。。。(4)]签名生成

到这里了,你会问OrederSendInfo info是个什么鬼??????
记住:WX_DATA_XINHAO_HAN.API_KEY 是你自己的秘钥

别急老规矩先复制代码

//生成预支付随机签名
public staticStringgenSign(OrederSendInfo info) {
StringBuffer sb =newStringBuffer(info.toString());
if(WX_DATA_XINHAO_HAN.API_KEY.equals("")) {
Toast.makeText(UIUtils.getContext(),"APP_ID为空",Toast.LENGTH_LONG).show();
}
//拼接密钥
sb.append("key=");
sb.append(WX_DATA_XINHAO_HAN.API_KEY);
String appSign = MD5.getMessageDigest(sb.toString().getBytes());
Log.e("Sign-------------","genSign: "+ appSign.toUpperCase());
returnappSign.toUpperCase();
}

好了现在给你解释一下这个是个什么鬼OrederSendInfo info方法参数
这个其实就是一个Bean
看代码

public classOrederSendInfo {
privateStringappid;
privateStringmch_id;
privateStringnonce_str;
privateStringbody;
privateStringout_trade_no;
privateStringtotal_fee;
privateStringspbill_create_ip;
privateStringnotify_url;
privateStringtrade_type;
privateStringsign;
publicOrederSendInfo(String appid,String mch_id,String nonce_str,String body,String out_trade_no,String total_fee,String spbill_create_ip,String notify_url,String trade_type) {
this.appid= appid;
this.mch_id= mch_id;
this.nonce_str= nonce_str;
this.body= body;
this.out_trade_no= out_trade_no;
this.total_fee= total_fee;
this.spbill_create_ip= spbill_create_ip;
this.notify_url= notify_url;
this.trade_type= trade_type;
}
publicStringgetAppid() {
returnappid;
}
public voidsetAppid(String appid) {
this.appid= appid;
}
publicStringgetMch_id() {
returnmch_id;
}
public voidsetMch_id(String mch_id) {
this.mch_id= mch_id;
}
publicStringgetNonce_str() {
returnnonce_str;
}
public voidsetNonce_str(String nonce_str) {
this.nonce_str= nonce_str;
}
publicStringgetBody() {
returnbody;
}
public voidsetBody(String body) {
this.body= body;
}
publicStringgetOut_trade_no() {
returnout_trade_no;
}
public voidsetOut_trade_no(String out_trade_no) {
this.out_trade_no= out_trade_no;
}
publicStringgetTotal_fee() {
returntotal_fee;
}
public voidsetTotal_fee(String total_fee) {
this.total_fee= total_fee;
}
publicStringgetSpbill_create_ip() {
returnspbill_create_ip;
}
public voidsetSpbill_create_ip(String spbill_create_ip) {
this.spbill_create_ip= spbill_create_ip;
}
publicStringgetNotify_url() {
returnnotify_url;
}
public voidsetNotify_url(String notify_url) {
this.notify_url= notify_url;
}
publicStringgetTrade_type() {
returntrade_type;
}
public voidsetTrade_type(String trade_type) {
this.trade_type= trade_type;
}
publicStringgetSign() {
returnsign;
}
public voidsetSign(String sign) {
this.sign= sign;
}
//注意排序规则ASCII排序(一般按照A-Z,a-z)就行
@Override
publicStringtoString() {
return"appid="+appid+'&'+
"body="+body+'&'+
"mch_id="+mch_id+'&'+
"nonce_str="+nonce_str+'&'+
"notify_url="+notify_url+'&'+
"out_trade_no="+out_trade_no+'&'+
"spbill_create_ip="+spbill_create_ip+'&'+
"total_fee="+total_fee+'&'+
"trade_type="+trade_type+'&';
}
}

//记住在你调用的时候一定要在这个Bean里边赋值,明白不,然后传递给sign的方法签名就生成成功了
签名生成完成了

开始上传数据获取预支付接口

这里边有个XStream你可能找不到
在Studio里边加入这段

compile ('com.thoughtworks.xstream:xstream:1.4.7') {
excludegroup:'xmlpull',module:'xmlpull'
}

重新编译一下

代码复制

public static voidUnfiedOrder(OrederSendInfo orederSendInfo, finalListerner listerner) {
//生成sign签名
String sign = WXpayUtils.genSign(orederSendInfo);
//生成所需参数,为xml格式
orederSendInfo.setSign(sign.toUpperCase());
XStream xstream =newXStream();
xstream.alias("xml",OrederSendInfo.class);
finalString xml = xstream.toXML(orederSendInfo).replaceAll("__","_");
Log.e("xml---------------","UnfiedOrder: "+ xml);
//调起接口,获取预支付ID
OkHttpUtils.ResultCallback resultCallback =newOkHttpUtils.ResultCallback() {
@Override
public voidonSuccess(String response) {
Log.e("返回的数据","onSuccess: "+ response);
String data = response;
data = data.replaceAll("","");
listerner.Success(data);
}
@Override
public voidonFailure(Exception e) {
listerner.Faiulre(e.toString());
}
};
try{
OkHttpUtils.post(WX_DATA_XINHAO_HAN.UNIFIED_ORDER,resultCallback, newString(xml.getBytes("UTF-8"),"ISO8859-1"));
}catch(UnsupportedEncodingException e) {
e.printStackTrace();
}
}

至于里边的Listnener
在这里

代码复制

public interfaceListerner {
voidSuccess(String data);
voidFaiulre(String data);
}

拿到微信端的数据之后,直接掉起微信支付

[图片上传中。。。(7)]调起微信支付

开始填充数据

[图片上传中。。。(8)]填充数据

特别感谢:掘墓人
博客地址:http://www.jianshu.com/p/9a3127cfda4d
我通过他所给的DEMO集成出了一套及简单的Demo

下载地址: 链接: https://pan.baidu.com/s/1c2zURjq 密码: jpr5

使用方法:你的这几个部位可能会报错注意,注意!!!!!!!!!!

[图片上传中。。。(9)]WXActivity

因为微信很吊,你必须按照人家的来,直接在我那个工具包下创建一个Activity名字叫WXEntryActivity

你在你自己创建的Activity-->WXEntryActivity的这个方法下

[图片上传中。。。(10)]

直接复制这段代码

WxMain.setStringOnListener(WXEntryActivity.this);
//如果是支付
WxMain.WXMessage wxMessage;
if(baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
intcode = baseResp.errCode;
switch(code) {
case0:
if(wxMessage!=null)
wxMessage.message("支付成功",0,"0.0");
//支付成功
break;
case-1:
if(wxMessage!=null)
wxMessage.message("支付失败",-1,"0.0");
//支付失败
finish();
break;
case-2:
if(wxMessage!=null)
wxMessage.message("支付取消",-2,"0.0");
//支付取消
finish();
break;
default:
if(wxMessage!=null)
wxMessage.message("支付失败",-3,"0.0");
//支付失败
setResult(RESULT_OK);
finish();
break;
}
return;
}

使用是这样的:

[图片上传中。。。(11)]使用

第一个为你的商品描述,第二个为金额,回调只有0是成功的
0 成功
-1 支付失败
-2 支付取消
-3 支付失败
使用的话直接复制进去就可以了
总而言之微信相比之下还要比支付宝麻烦
说白了就是加密数据发送再给你解析一下数据然后在调起支付,大致就这两个步骤
工具可能会用到的东西
compile'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
compile ('com.thoughtworks.xstream:xstream:1.4.7') {
excludegroup:'xmlpull',module:'xmlpull'
}
compile'com.zhy:okhttputils:2.4.1'

第二个如果你自己想拼的话就不用了,工具里边是XML的解析器生成的XML
有时间会给大家讲解一些OKHttp底层RXJAVA ,Kotlin,Android源码,
一起加油,0.0哈哈.
现推出豪华午餐,微信+支付宝

链接:http://pan.baidu.com/s/1sldR6O1 密码:ggzg

使用方法:

 PayMain.AliPayAndWxPay(type, OrderSettlementActivity.this, "红红火火恍恍惚惚哈哈", "0.01", requestBean.order.orderId, new WxMain.WXMessage() {
                        @Override
                        public void message(String str, int code, String error) {
                            switch (code) {
                                case 1:
                                    UIUtils.runOnUIToast("支付成功");
                                    finish();

                                    break;
                                case 2:
                                case 3:
                                case -11:
                                case 4:
                                    UIUtils.runOnUIToast(str);
                                    break;

                            }
                        }
                    });


type  = PayMain.WX_PAY//微信支付
type  = PayMain.ALI_PAY//支付宝支付

[图片上传中。。。(12)]0.0

![2BXPQ4P[35Z7VW6]N)WN$8.png

Demo中的东西可能很多,是我自定义的一些控件,如果不需要全部删除即可.

下载Demo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • 好了,多余的话不过多解释,下面咋们大家一起来看看微信的SDK接入文档 如果哥们急的话请调到:https://www...
    XINHAO_HAN阅读 1,061评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,569评论 25 707
  • ​​​本文的作者是看房狗原创志愿者小玄子,房子是租来的,但生活不是。她的系列租房故事,汪会一直连载,故事始于201...
    看房狗阅读 203评论 0 1
  • 二十四年不见的战友阿君來乌,都是新兵连的战友,大家把酒言欢,畅饮甚欢,我不饮酒,不善言辞,频频举茶敬杯,时间拉远的...
    助学大漠阅读 373评论 0 1
  • 当你愤怒的时候,世界将没有一个角落是和平。 当你愤怒的时候,周边将没有一个面孔是亲切。 当你愤怒的时候,你内心深处...
    舒陌染阅读 437评论 0 2