微信小程序 支付demo员怎么自己写支付的demo

分类:Android应用层
最近公司弄Ionic框架,项目中需要微信支付,无奈,把我调过去弄,期间也是几近崩溃,好在皇天不负有心人,在看别人的文档,终于是在项目中集成了微信支付,下面作为一个小白的我,想要把我的经验分享给大家,希望对大家有所帮助。
先给一个可用的demo吧(运行前先看txt文件)
这个demo是基于eclipse开发的,博主也在Android Studio开发过微信支付,原理都是一样的,大家把这个demo弄懂了,在AS上面也是一样的。
(温馨提示:大家下载下来可能会出错,也有可能不会。下面给出出错的解决方法:1.进入项目中的WeIXinPay-&Build Path-&configure build path,移除那个报错的jar包。 2.会出现资源找不到的情况,这是因为你没有v7包,下载一个v7包,或者把出错的地方都删除,只是一个主题,删除了看起来不好看而已,当然,你也可以用你有的主题。 还有一个问题需要提出来,就是你可能按照里面的text操作的仍然调不起客户端,有可能是你没有安装微信客户端,因为我没有做判断。这个demo不会出现只能成功支付一次的情况,博主亲测有效。出现只能支付一次只能说明你的签名没有对应)
1.去微信开放平台申请微信支付服务,绑定自己的应用这里具体不多讲,但是一定要申请完成,将会得到是三个参数
public static final String APP_ID = &&;
public static final String MCH_ID = &&;
public static final
String API_KEY= &&;12345678
**坑点提示:在微信开发平台设置包名和签名。这里的包名一定要和你自己的包名一样,就是manifest中的package,签名一定要和你用官方app生成的一样()。
微信会根据你的填写的包名,然后对你的keystore进行一种算法,生成你的签名。包名和签名一定要和微信开放平台的相同。不过这里需要注意的是,如果你发布的正式版本,需要用官方app重新生成签名,然后在开放平台重新设置sign,因为测试版本的keystore与正式版的keystore不一样。总之,就是你用的keystore生成的sign要和微信开放平台的时刻保持一致。**
2.准备工作做好了,接下来就是开发了,先下载微信的jar包,导入。
微信支付分为三个步骤
1.生成prepayId
protected Map&String, String& doInBackground(String... params) {
String url=String.format(params[0]);
String entity=getProductArgs();
Log.e(&Simon&,&&&&&&+entity);
byte[] buf=Util.httpPost(url, entity);
String content = new String(buf);
Log.e(&orion&, &----&+content);
Map&String,String& xml=decodeXml(content);
}12345678910111213
2.生成签名参数
private void genPayReq() {
req.appId = Constants.APP_ID
req.partnerId = Constants.MCH_ID
if (resultunifiedorder!=null) {
req.prepayId = resultunifiedorder.get(&prepay_id&)
req.packageValue = &prepay_id=&+resultunifiedorder.get(&prepay_id&)
Toast.makeText(MainActivity.this, &prepayid为空&, Toast.LENGTH_SHORT).show()
req.nonceStr = getNonceStr()
req.timeStamp = String.valueOf(genTimeStamp())
List&NameValuePair& signParams = new LinkedList&NameValuePair&()
signParams.add(new BasicNameValuePair(&appid&, req.appId))
signParams.add(new BasicNameValuePair(&noncestr&, req.nonceStr))
signParams.add(new BasicNameValuePair(&package&, req.packageValue))
signParams.add(new BasicNameValuePair(&partnerid&, req.partnerId))
signParams.add(new BasicNameValuePair(&prepayid&, req.prepayId))
signParams.add(new BasicNameValuePair(&timestamp&, req.timeStamp))
req.sign = genAppSign(signParams)
sb.append(&sign\n&+req.sign+&\n\n&)
textView.setText(sb.toString())
Log.e(&Simon&, &----&+signParams.toString())
}1234567891011121314151617181920212223242526272829303132
3.调起支付。
* 调起微信支付
private void sendPayReq() {
msgApi.registerApp(Constants.APP_ID);
msgApi.sendReq(req);
Log.i(&&&&&&&, req.partnerId);
}12345678910
下面给出完整代码
package com.alpha.live
import java.io.StringReader
import java.util.HashMap
import java.util.LinkedList
import java.util.List
import java.util.Map
import java.util.Random
import org.apache.http.NameValuePair
import org.apache.http.message.BasicNameValuePair
import org.xmlpull.v1.XmlPullParser
import com.tencent.mm.sdk.modelpay.PayReq
import com.tencent.mm.sdk.openapi.IWXAPI
import com.tencent.mm.sdk.openapi.WXAPIFactory
import android.app.Activity
import android.app.AlertDialog
import android.app.ProgressDialog
import android.os.AsyncTask
import android.os.Bundle
import android.util.Log
import android.util.Xml
import android.view.View
import android.view.View.OnClickListener
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
public class MainActivity extends Activity implements OnClickListener {
private Button submitButton
private Button confirmButton
private TextView textView
private StringBuffer sb
private Map&String,String& resultunifiedorder
private PayReq req
private final IWXAPI msgApi = WXAPIFactory.createWXAPI(this, null)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
submitButton=(Button) findViewById(R.id.bt_submit_order)
confirmButton=(Button) findViewById(R.id.bt_corfirm)
textView=(TextView) findViewById(R.id.tv_prepay_id)
submitButton.setOnClickListener(this)
confirmButton.setOnClickListener(this)
sb=new StringBuffer()
req=new PayReq()
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.bt_submit_order:
String urlString=&https://api.mch./pay/unifiedorder&
PrePayIdAsyncTask prePayIdAsyncTask=new PrePayIdAsyncTask()
prePayIdAsyncTask.execute(urlString)
case R.id.bt_corfirm:
genPayReq()
sendPayReq()
private void sendPayReq() {
msgApi.registerApp(Constants.APP_ID)
msgApi.sendReq(req)
Log.i(&&&&&&&, req.partnerId)
private long genTimeStamp() {
return System.currentTimeMillis() / 1000
private void genPayReq() {
req.appId = Constants.APP_ID
req.partnerId = Constants.MCH_ID
if (resultunifiedorder!=null) {
req.prepayId = resultunifiedorder.get(&prepay_id&)
req.packageValue = &prepay_id=&+resultunifiedorder.get(&prepay_id&)
Toast.makeText(MainActivity.this, &prepayid为空&, Toast.LENGTH_SHORT).show()
req.nonceStr = getNonceStr()
req.timeStamp = String.valueOf(genTimeStamp())
List&NameValuePair& signParams = new LinkedList&NameValuePair&()
signParams.add(new BasicNameValuePair(&appid&, req.appId))
signParams.add(new BasicNameValuePair(&noncestr&, req.nonceStr))
signParams.add(new BasicNameValuePair(&package&, req.packageValue))
signParams.add(new BasicNameValuePair(&partnerid&, req.partnerId))
signParams.add(new BasicNameValuePair(&prepayid&, req.prepayId))
signParams.add(new BasicNameValuePair(&timestamp&, req.timeStamp))
req.sign = genAppSign(signParams)
sb.append(&sign\n&+req.sign+&\n\n&)
textView.setText(sb.toString())
Log.e(&Simon&, &----&+signParams.toString())
private String genAppSign(List&NameValuePair& params) {
StringBuilder sb = new StringBuilder()
for (int i = 0
sb.append(params.get(i).getName())
sb.append('=')
sb.append(params.get(i).getValue())
sb.append('&')
sb.append(&key=&)
sb.append(Constants.API_KEY)
this.sb.append(&sign str\n&+sb.toString()+&\n\n&)
String appSign = MD5.getMessageDigest(sb.toString().getBytes())
Log.e(&Simon&,&----&+appSign)
return appSign
private class PrePayIdAsyncTask extends AsyncTask&String,Void, Map&String, String&&
private ProgressDialog dialog
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute()
dialog = ProgressDialog.show(MainActivity.this, &提示&, &正在提交订单&)
protected Map&String, String& doInBackground(String... params) {
// TODO Auto-generated method stub
String url=String.format(params[0])
String entity=getProductArgs()
Log.e(&Simon&,&&&&&&+entity)
byte[] buf=Util.httpPost(url, entity)
String content = new String(buf)
Log.e(&orion&, &----&+content)
Map&String,String& xml=decodeXml(content)
return xml
protected void onPostExecute(Map&String, String& result) {
// TODO Auto-generated method stub
super.onPostExecute(result)
if (dialog != null) {
dialog.dismiss()
sb.append(&prepay_id\n&+result.get(&prepay_id&)+&\n\n&)
textView.setText(sb.toString())
resultunifiedorder=result
public Map&String,String& decodeXml(String content) {
Map&String, String& xml = new HashMap&String, String&()
XmlPullParser parser = Xml.newPullParser()
parser.setInput(new StringReader(content))
int event = parser.getEventType()
while (event != XmlPullParser.END_DOCUMENT) {
String nodeName=parser.getName()
switch (event) {
case XmlPullParser.START_DOCUMENT:
case XmlPullParser.START_TAG:
if(&xml&.equals(nodeName)==false){
//实例化student对象
xml.put(nodeName,parser.nextText())
case XmlPullParser.END_TAG:
event = parser.next()
return xml
} catch (Exception e) {
Log.e(&Simon&,&----&+e.toString())
return null
private String getProductArgs() {
// TODO Auto-generated method stub
StringBuffer xml=new StringBuffer()
String nonceStr=getNonceStr()
xml.append(&&xml&&)
List&NameValuePair& packageParams=new LinkedList&NameValuePair&()
packageParams.add(new BasicNameValuePair(&appid&,Constants.APP_ID))
packageParams.add(new BasicNameValuePair(&body&, &APP pay test&))
packageParams.add(new BasicNameValuePair(&mch_id&, Constants.MCH_ID))
packageParams.add(new BasicNameValuePair(&nonce_str&, nonceStr))
packageParams.add(new BasicNameValuePair(&notify_url&, &&))
packageParams.add(new BasicNameValuePair(&out_trade_no&,genOutTradNo()))
packageParams.add(new BasicNameValuePair(&total_fee&, &1&))
packageParams.add(new BasicNameValuePair(&trade_type&, &APP&))
String sign=getPackageSign(packageParams)
packageParams.add(new BasicNameValuePair(&sign&, sign))
String xmlString=toXml(packageParams)
return xmlString
} catch (Exception e) {
// TODO: handle exception
return null
//生成订单号,测试用,在客户端生成
private String genOutTradNo() {
Random random = new Random()
return &dasgfsdg1234&
return MD5.getMessageDigest(String.valueOf(random.nextInt(10000)).getBytes())
//生成随机号,防重发
private String getNonceStr() {
// TODO Auto-generated method stub
Random random=new Random()
return MD5.getMessageDigest(String.valueOf(random.nextInt(10000)).getBytes())
private String getPackageSign(List&NameValuePair& params) {
StringBuilder sb = new StringBuilder()
for (int i = 0
sb.append(params.get(i).getName())
sb.append('=')
sb.append(params.get(i).getValue())
sb.append('&')
sb.append(&key=&)
sb.append(Constants.API_KEY)
String packageSign = MD5.getMessageDigest(sb.toString().getBytes()).toUpperCase()
Log.e(&Simon&,&&&&&&+packageSign)
return packageSign
private String toXml(List&NameValuePair& params) {
StringBuilder sb = new StringBuilder()
sb.append(&&xml&&)
for (int i = 0
sb.append(&&&+params.get(i).getName()+&&&)
sb.append(params.get(i).getValue())
sb.append(&&/&+params.get(i).getName()+&&&)
sb.append(&&/xml&&)
Log.e(&Simon&,&&&&&&+sb.toString())
return sb.toString()
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
接下来就是有个支付结果的页面代码。是微信官方提供的一个类。你要在manifest注册这个类。这里需要注意的是,这个类必须放在wxapi包下,你自己新建一个包即可。
为了大家可以直接运行这个demo,我的微信加签都是在本地执行的,获取prepayid和加签都应该在服务端完成,还有最终的支付返回结果也是以服务端的为准。
*下面给出运行结果图*
大家下载demo然后把参数换了,弄下keystore,包名,签名。应该就可以用了。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:6293次
排名:千里之外
原创:16篇
转载:16篇
(1)(1)(7)(4)(14)(1)(1)(1)(2)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'/guaju/wechat_sdk_demo
上面是连接,微信官方demo过时太久,貌似也没有人维护,存在很多坑
这个是我自己创建的工程,并且引入了最新的依赖,处理了因导eclipse项目造成的小问题
但是由于微信不维护了,所以这个demo目前只能运行,让读者看看微信支付怎么写,demo本身不能支付了,请知晓
最后还是推荐大家使用三方平台,或者开源项目,以免浪费时间。。。。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:192727次
积分:3431
积分:3431
排名:第10109名
原创:114篇
转载:183篇
评论:70条
(9)(11)(3)(8)(2)(14)(9)(13)(14)(4)(25)(56)(62)(23)(2)(3)(2)(8)(10)(6)(2)(13)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'1439人阅读
今天折腾了一下午的支付宝快捷支付的android集成,从官网上下载的demo直接跑是会报错的,犯了很多傻逼的错误,因此写个文章记录一下。
1.申请服务
首先你得申请支付宝的快捷支付的服务,这个我就不多说了,申请过程相当麻烦,我重新提交了好几次~~。这里有个误区,开通快捷支付是不需要去支付宝开放平台申请的,那边的是针对你的应用或者网站的一些服务的申请,如果你只要快捷支付,那那边的就不需要申请了。
2.下载开发资料
这个在支付宝的签约管理里面找找就能找到,里面会有一些技术文档和一些demo,外加一个用来生成公钥私钥各种钥的工具(等会儿要用)。
3.密钥生成与添加
点查看PID|Key,进去应该会让你输入你的支付密码,确认你的身份。进入之后应该能看到这些
(卧槽,csdn的编辑器这么吊,我从网页上复制内容过来粘贴,直接把网页样式也放进来了,吊吊吊)
好了,这边的先放着,咱们掏出我们刚才下载的开发资料,找到里面的DEMO---&openssl。。生成的两个文件都可以用记事本打开,里面的内容都跟你刚才在命令行里拉出来的差不多。然后到刚才让你打开的那个支付宝的界面上,点击
”合作伙伴密钥管理”中的“添加密钥“,会出现一个框, 把你的rsa_public_key.pem中去掉-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
把你的”DEMO\客户端demo\alipay_demo“导入到你的一克立普斯里面,打开src,里面应该有5个.Java文件
“,复制就行
填完,ctrl
+ s,run一下,运气好的话,你就能支付成功了。but,本吊就是这么点儿背,偏偏报错,跟踪错误,不出意外的话你会到SignUtils.java里面,这一行:效果就是这么神奇,支付成功了,本吊的0.01元缓缓流入公司账户,为公司的财政收入做出巨大贡献,我的眼里泛起了泪花,既心疼又开心。事后高兴的跟老板要了一张报销单,把我的0.01元报销了。本吊还在继续学习中,有要交流的可以再评论去大喊三声博主好帅,我立马回出现在你面前。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5582次
排名:千里之外
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'&>&.net支付宝服务端代码demo从支付到接收通知完成验签的过程
.net支付宝服务端代码demo从支付到接收通知完成验签的过程
上传大小:2.01MB
.net支付宝服务端代码demo,AopSDK.dll是支付宝官方sdk,需要源码的可以自己下。这个代码是以电脑端支付为例从创建支付到接收通知完成验签这个过程为例,其他的可以以此参考,实例化sdk中不同的类
综合评分:0(0位用户评分)
所需积分:
下载个数:12
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有0条
审核通过送C币
C#代码实例
创建者:nihang1234
C#移动端开发
创建者:vhion
installshield2015Premier破解版
创建者:qq_
上传者其他资源上传者专辑
结合ztree的下拉框树形结构数据多选,单选
开发技术热门标签
VIP会员动态
前端开发重难点
17年软考最新真题及解析
物联网全栈开发专题
二十大技术领域优质资源
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
CSDN&VIP年卡&4000万程序员的必选
.net支付宝服务端代码demo从支付到接收通知完成验签的过程
会员到期时间:
剩余下载个数:
剩余C币:0
剩余积分:
积分不足!
资源所需积分
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分
当前拥有积分
当前拥有C币
(仅够下载10个资源)
全站1200个资源免积分下载
资源所需积分
当前拥有积分
当前拥有C币
全站1200个资源免积分下载
资源所需积分
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
全站1200个资源免积分下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
.net支付宝服务端代码demo从支付到接收通知完成验签的过程主题 : 微信支付官方demo运行直接崩溃
级别: 圣骑士
UID: 525877
可可豆: 1627 CB
威望: 1593 点
在线时间: 425(时)
发自: Web Page
来源于&&分类
微信支付官方demo运行直接崩溃&&&
有大神集成过微信支付吗?去年下载官方的demo运行还是好好的,今年运行就直接崩溃了,这是什么情况?有遇到过同样的问题的吗?
级别: 新手上路
UID: 544808
可可豆: 35 CB
威望: 36 点
在线时间: 76(时)
发自: Web Page
解决办法:添加库 CFNetwork.framework&&libc++.tbd
级别: 圣骑士
UID: 525877
可可豆: 1627 CB
威望: 1593 点
在线时间: 425(时)
发自: Web Page
回 1楼(flight彬) 的帖子
我添加了这两个库,还是崩溃,这两个库是解决报错问题,我这是添加这两个库后没有报错,运行直接崩溃
级别: 新手上路
UID: 544808
可可豆: 35 CB
威望: 36 点
在线时间: 76(时)
发自: Web Page
回 2楼(疯狂新手程序员) 的帖子
不好意思,刚才问题看错了,我也是这几天才看这个的,在做微信支付,你可以试下在你的工程---BuildSetting ---Other Linker Flags---中加上“-Objc -all_load”;我就是这么解决的,共同学习哈
级别: 圣骑士
UID: 525877
可可豆: 1627 CB
威望: 1593 点
在线时间: 425(时)
发自: Web Page
回 3楼(flight彬) 的帖子
谢谢了啊,真是这里的问题。
级别: 新手上路
UID: 209120
可可豆: 34 CB
威望: 23 点
在线时间: 106(时)
发自: Web Page
Re:回 2楼(疯狂新手程序员) 的帖子
引用 引用第3楼flight彬于 16:12发表的 回 2楼(疯狂新手程序员) 的帖子 :不好意思,刚才问题看错了,我也是这几天才看这个的,在做微信支付,你可以试下在你的工程---BuildSetting ---Other Linker Flags---中加上“-Objc -all_load”;我就是这么解决的,共同学习哈&&我是回来点赞的 亲测有效 谢谢分享
级别: 侠客
可可豆: 244 CB
威望: 244 点
在线时间: 168(时)
发自: Web Page
回 3楼(flight彬) 的帖子
大神啊,真是帮了我大忙,赞一个,抱大腿~
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版}

我要回帖

更多关于 php微信支付demo 的文章

更多推荐

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

点击添加站长微信